必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

点击进入博客,pragma 必威:mark — 04 隐藏启动图

2019-10-05 01:10 来源:未知

pragma mark 概念

查看目录
01 自定义导航栏左上角返回按钮后,返回失效的解决
02 关于tableViewCell上的按钮状态重用问题
03 时间转换上的问题
04 隐藏启动图片的状态栏
05 TableView不显示没内容的Cell
06 判定程序是否是第一次在设备上运行
07 禁止应用横屏
08 本地化按钮状态
09  解决NSTimer在主线程不运行的方法
前言:iOS有许多琐碎的知识点而且是比较简单的(往往我们最容易忽略的),我把所有自己觉得有用的东西从大牛的博客或文章中截取过来,方便自己以后查找(也希望对看文章的你又帮助)

查看提示

01 tableView的编辑状态
02 tableViewCell的刷新
03 获取沙盒各个文件路径
04 计算文字尺寸
05 UINavigationController pop移除控制器的三个方法
06 Modal 的两个方法(都带有回调方法的)
07 initailize、load 方法的区别
08 重要方法
09 UICollectionView相关知识
10 判断系统版本
11 Xcode 模拟器上的一些快捷键
12 块遍历
13 自动布局UIButton 和 UILabel
14.测试某段代码执行效率

前言:把自己平常写项目遇到的一些问题的解决方案总结到这里,方便自己以后查看,也希望对看文章的你有一定的帮助

pragma mark 代码

#include <stdio.h>#include "zs.h"//void demo();/** 函数也分为内部函数 和 外部函数 默认情况下所有的函数都是外部函数 什么是外部函数? 可以被其他文件访问的函数 称之为 外部函数 什么是内部函数? 只能在当前文件中访问的函数 称之为 内部函数 */int main;// demo(); return 0;}
pragma mark -- 01 自定义导航栏左上角返回按钮后,返回失效的解决
解决方法是在给自定义item初始化时就添加一个监听方法
 //导航左边按钮
    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]initWithTitle:@"" style:UIBarButtonItemStyleDone target:self action:@selector(popTORootController)];
//监听方法
-(void)popTORootController
{
   [self.navigationController popViewControllerAnimated:YES];
}

查看提示

01 layoutSubviews调用的调用时机
02 Color颜色宏定义
03 视图的生命周期
04 UIImageView填充模式
05 文字内容换行
06 把NSString格式的日期转换为NSDate
07 延迟执行
08 加载plist文件
09 常用宏定义
10 获得当前界面的控制器
11 如何设置自定义字体
12 进程和线程的简单介绍
13 从xib创建的cell注册方法
14.label的设置圆角的区别
pragma mark - 01 tableView的编辑状态
  • 如果实现了这个方法,就自动实现了滑动删除的功能
  • 点击了删除按钮就会调用
  • 提交了一个编辑操作就会调用(操作:删除添加)
  • @param editingStyle 编辑的行为
  • @param indexPath 操作的行号
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:

(NSIndexPath *)indexPath
{if (editingStyle == UITableViewCellEditingStyleDelete) { // 提交的是删除操作,默认就是传的删除
}
查看目录
01 解决UICollectionView点击手势与didSelected方法冲突
02 id特性的运用
03 标签控制器标签栏设置背景
04 设置图片的渲染模式
05 UITableViewCell的点击效果设置
06 UITableView 滑动遇到的小问题
07 运行突然出现you don’t have permission to view it错误
08 设置UITableViewCell的分割线最简单的方法
09 利用导航栏跳转时隐藏底部的tabBar栏
10 直接设置导航栏中间标题的字体大小和颜色
11 如何设置自定义字体
12 AFNetWorking 请求数据报”Request failed: unacceptable content-type: text/plain” 错误解决方法
"zs.h"
void text ();// 在.h声明一个内部函数没有任何意义//static void demo();

#include "zs.h"// 定义内部函数 一般用于内部函数定义的后面,而想在定义之前使用内部函数static void demo();// 只要在函数的返回值前面加上一个extern就可以函数变成一个外部函数,由于默认就是外部函数. 所以在开发中一般情况extern没人写// 如果extern写在函数的实现中,代表定义一个外部函数// 如果extern写在函数的声明中,代表声明一个外部函数extern void demo(){ printf; demo();}void text (){ printf; demo(); // 如果需要使用在 前面声明一下 }/** "_demo", referenced from: _main in main.o 意思是 在main.o里面没有找到 demo这个函数 */// 只要在函数的返回值 前面加上static就可以让函数变为内部函数,其他文件就不能访问了// 如果static写在函数的实现中,代表定义一个内部函数// 如果static写在函数的声明中,代表声明一个内部函数static void demo(){ printf;}
pragma mark -- 02 关于tableViewCell上的按钮状态重用问题
最近做的项目中要求有每个cell上有个提醒按钮,以提醒用户在特定的时间做什么事情。这个按钮就存在选中和不选中状态,直接设置的话会导致cell的循环引用,接下来是解决方法有点多
1.给模型写一个BOOL值记录按钮状态 
/**提醒按钮的判断*/
@property (nonatomic , assign) BOOL isMarked;
2.在自定义cell中写一个代理方法(cell.h中)
#pragma mark -- 1.写个协议(解决点击提醒按钮后,循环引用的问题)
@protocol JJChannelDetailsCellDelegate <NSObject>
//实现的方法
-(void)channelCellIsMarked:(BOOL)isMarked Cell:(JJChannelDetailsCell *)cell;
@end
#pragma mark -- 2 定义代理属性
/**代理属性*/
@property (nonatomic , weak) id<JJChannelDetailsCellDelegate> delegate;
3.cell.m中(准备工作是将提醒按钮从xib中拖属性和方法出来)
#pragma mark -- 提醒按钮的点击方法
- (IBAction)clickRemindBtn:(UIButton *)sender {
    [sender setSelected:sender.selected ? false : true]; #pragma mark -- 3.判断代理者是否遵守了代理协议,如果遵守了就做事情
    if ([_delegate respondsToSelector:@selector(channelCellIsMarked:Cell:)]) {
        //如果遵守了代理协议,就把那个按钮的选中状态和当前的cell传过去
        [_delegate channelCellIsMarked:sender.selected Cell:self];
    }
}
4viewController.m中(遵守协议并实现协议方法)
#pragma mark -- 自定义cell的代理方法,用于解决提醒按钮点击后的循环引用
-(void)channelCellIsMarked:(BOOL)isMarked Cell:(JJChannelDetailsCell *)cell
{
    //根据tableView的这个方法拿到
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
    if(_channelDetailsArrs && _channelDetailsArrs.count)
    {
        JJChannelDetailsModel *model = [_channelDetailsArrs objectAtIndex:indexPath.row];
        model.isMarked = isMarked;
    }
}
5.最后在cell.m的模型的set方法中给按钮状态赋值
 //重新给提醒按钮的状态赋值
    self.remindBtn.selected = channelDetail.isMarked;
pragma — mark - 01
  • layoutSubviews调用的调用时机
1.当视图第一次显示的时候会被调用
2.当这个视图显示到屏幕上了,点击按钮
3.添加子视图也会调用这个方法
4.当本视图的大小发生改变的时候是会调用的
5.当子视图的frame发生改变的时候是会调用的
6.当删除子视图的时候是会调用的
pragma mark - 02 tableViewCell的刷新
全局刷新:[self.tableView reloadData];
局部刷新:NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
[self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationBottom];
//刷新第 0 组的第 row 行
pragma mark -- 01 解决UICollectionView点击手势与didSelected方法冲突
  • 做的小项目中遇到了给UICollectionView添加了点击手势而cell的代理方法didSelect不响应了,上网查了下解决方法
1.首先你得遵守 UIGestureRecognizerDelegate,设置代理 _tap.delegate = self;
2.实现代理方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if (touch.view != self.collectionView) {
        return NO;
    }
   return YES;
}
这个代理方法会拦截你的点击手势,先进行判断是否进行手势事件
pragma mark — 03 时间转换上的问题
1.在将一个时间字符串转化为NSDate类型时,时区不正确
 NSDateFormatter *fmt = [[NSDateFormatter alloc]init];
    fmt.dateFormat = @"yyyy-MM-dd HH:mm";
#    NSTimeZone * timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
 #   [fmt setTimeZone:timeZone];
   //将当前时间转换为那个NSDate格式的
    NSDate *playDate = [fmt dateFromString:self.playTime];

  NSLog(@"%@",playDate);
//如果不加红色的时区设置,直接转换的时间是和实际时间偏差比较大的
pragma — mark - 02
  • Color颜色宏定义
// 随机颜色
#define RANDOM_COLOR [UIColor colorWithRed:arc4random_uniform(256) / 255.0 green:arc4random_uniform(256) / 255.0 blue:arc4random_uniform(256) / 255.0 alpha:1]
// 颜色(RGB)
#define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]
#define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
pragma mark - 03 获取沙盒各个文件路径
  • 沙盒各个文件夹的作用
#Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录

#Library:存储程序的默认设置或其它状态信息;

#Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除

#tmp:提供一个即时创建临时文件的地方。
  • 获取沙盒根目录:
-(void)dirHome{ NSString *dirHome=NSHomeDirectory(); 
NSLog(@"app_home: %@",dirHome);}
  • 获取 Documents 目录路径:
//获取Documents目录
-(NSString *)dirDoc{ 
//[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSLog(@"app_home_doc: %@",documentsDirectory); return documentsDirectory;}
  • 获取 Library 目录路径
//获取Library目录-(void)dirLib{ 
//[NSHomeDirectory() stringByAppendingPathComponent:@"Library"]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); 
NSString *libraryDirectory = [paths objectAtIndex:0]; 
NSLog(@"app_home_lib: %@",libraryDirectory);}
  • 获取 Cache 目录路径
//获取Cache目录-(void)dirCache{ 
NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cachePath = [cacPath objectAtIndex:0]; 
NSLog(@"app_home_lib_cache: %@",cachePath);}
  • 获取 Tmp 目录路径
//获取Tmp目录-(void)dirTmp{
//[NSHomeDirectory() stringByAppendingPathComponent:@"tmp"];
 NSString *tmpDirectory = NSTemporaryDirectory(); 
NSLog(@"app_home_tmp: %@",tmpDirectory);}
  • 创建文件夹
//创建文件夹-(void *)createDir{
 NSString *documentsPath =[self dirDoc]; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; 
// 创建目录 BOOL res=[fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];
 if (res) { NSLog(@"文件夹创建成功"); }else NSLog(@"文件夹创建失败"); }}
  • 创建文件
//创建文件-(void *)createFile{ 
NSString *documentsPath =[self dirDoc]; 
NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; 
NSFileManager *fileManager = [NSFileManager defaultManager];
 NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"]; 
BOOL res=[fileManager createFileAtPath:testPath contents:nil attributes:nil]; 
if (res) { NSLog(@"文件创建成功: %@" ,testPath); }else NSLog(@"文件创建失败"); }}
  • 写数据到文件:
//写文件-(void)writeFile{ 
NSString *documentsPath =[self dirDoc]; 
NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];
 NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"]; 
NSString *content=@"测试写入内容!";
 BOOL res=[content writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; 
if (res) { NSLog(@"文件写入成功"); }else NSLog(@"文件写入失败"); }}
  • 读文件数据:
//读文件-(void)readFile{ 
NSString *documentsPath =[self dirDoc];
 NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; 
NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"]; //NSData *data = [NSData dataWithContentsOfFile:testPath]; /
/NSLog(@"文件读取成功: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
 NSString *content=[NSString stringWithContentsOfFile:testPath encoding:NSUTF8StringEncoding error:nil]; 
NSLog(@"文件读取成功: %@",content);}
pragma mark — 02 id特性的运用
  • 先说说问题情况,就是我自定义了三个textField,都有一个暴露给外界调用的一个方法 - (void)initiaText; 然后在textField的代理方法中我想调用这个方法而又不去写具体的自定义类名
//三个自定义的UITextField
 _flagField.delegate = self;
 _birthdayField.delegate = self;
 _cityField.delegate = self;

//代理方法:(笨写法)
- (void)textFieldDidBeginEditing:(FlagField *)textField
{
  [textField initialText];
} 
//利用id特性:能调用任何对象的方法—我们就不用去修改代理的父类名称了
- (void)textFieldDidBeginEditing:(id)textField
{
  [textField initialText];
}
TAG标签:
版权声明:本文由必威发布于必威-编程,转载请注明出处:点击进入博客,pragma 必威:mark — 04 隐藏启动图