项目中的小知识点(持续更新)

1.改变字符串中某几个字的颜色
这是富文本,如下:

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"123456789"];
[str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,1)];
label.attributedText = str; 

2.关于dataWithContentsOfURL请求经常返回data时空,用下面这种方法可以基本解决问题,当然偶尔还有可能出现。。。
data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:_lunboUrlArray[i]]] returningResponse:NULL error:nil];

3.用MJRefresh刷新返回崩溃,多半是没有在dealloc方法里free,如果你free了,多半是你不止创建了一次tableview,你自己找找,看是不是在一个地方重复创建了tableview。

4.dictionaryWithObjectsAndKeys的坑
我们在初始化字典时候,经常会用到dictionaryWithObjectsAndKeys,然而,这个方法有个坑,就是当元素中有个value是空的时候,后面的元素统一置为空了,而且还不会报错~不会报错!!
解决方法:用setValue forkey ,注意value为字符串。
当然了setObject forkey也可以,但是为空时候会报错(有提示的),需要判断是否是空,所以还是用前者吧。

5.touchesBegan: withEvent: / touchesMoved: withEvent: / touchesEnded: withEvent: 等只能被UIView捕获(如有问题请指出对请指出,路过的大牛请勿喷),当我们创建
UIScrollView 或 UIImageView 时,当点击时UIScrollView 或 UIImageView 会截获touch事件,导致touchesBegan: withEvent:/touchesMoved: withEvent:/touchesEnded: withEvent: 等方法执行。解决办法:当UIScrollView 或 UIImageView 截获touch事件后,让其传递下去即可(就是传递给其父视图UIView)

可以通过写UIScrollView 或 UIImageView 的category 重写touchesBegan: withEvent: / touchesMoved: withEvent: / touchesEnded: withEvent: 等来实现
在.m中实现如下方法

- (void)touchesBegan:(NSSet<UITouch *> *)**touches** withEvent:(UIEvent *)event{ // 选其一即可 [super touchesBegan:**touches** withEvent:event];// [[self nextResponder] touchesBegan:**touches** withEvent:event];}

6.引用第三方文件的时候,如果有.mm文件的,一定要注意,在other linker flags 里面写-ObjC(被坑惨了)

7.iOS中当有导航栏的情况下,tableView设置起始点为0,0,是会自动默认在导航栏下面开始,如果不要这种默认效果,我们只需要在viewdidload中self.automaticallyAdjustsScrollViewInsets = NO;即可。具体的原因应该是tableView有headview时候会默认的。这个问题我在解决MJRefresh下拉刷新时候碰到的bug,这样可以修复导致弹不上去。

8.iOS中文件下载
AF3.0 中 NSURLSessionDownloadTask,

NSURLSessionDownloadTask *_downloadTask;
NSURL *URL = [NSURL URLWithString:@"http://pic6.nipic.com/20100330/4592428_113348097000_2.jpg"];
    
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    
    //AFN3.0+基于封住URLSession的句柄
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
    
    //请求
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
    
    //下载Task操作
    _downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        
        // @property int64_t totalUnitCount;  需要下载文件的总大小
        // @property int64_t completedUnitCount; 当前已经下载的大小
        
        // 给Progress添加监听 KVO
        NSLog(@"%f",1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
        // 回到主队列刷新UI
        dispatch_async(dispatch_get_main_queue(), ^{
            self.progressView.progress = 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount;
            _titlelabel.text = [NSString stringWithFormat:@"当前进度为:%.2f%%",(1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount) * 100];
        });
        
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        
        //- block的返回值, 要求返回一个URL, 返回的这个URL就是文件的位置的路径
        
        NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        NSString *path = [cachesPath stringByAppendingPathComponent:response.suggestedFilename];
        return [NSURL fileURLWithPath:path];
        
    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        // filePath就是你下载文件的位置,你可以解压,也可以直接拿来使用
        
        NSString *imgFilePath = [filePath path];// 将NSURL转成NSString
//        UIImage *img = [UIImage imageWithContentsOfFile:imgFilePath];
        NSLog(@"img == %@", imgFilePath);
        if (imgFilePath) {
            [self cancelDownload];
            _webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 64, MAIN_SCREEN_WIDTH, MAIN_SCREEN_HEIGHT - 44 - 64)];
            [_webView setUserInteractionEnabled:YES];//是否支持交互
            //[webView setDelegate:self];
            _webView.delegate=self;
            [_webView setOpaque:NO];//opaque是不透明的意思
            [_webView setScalesPageToFit:YES];//自动缩放以适应屏幕
            [self.view addSubview:_webView];
            NSURL *url = [NSURL fileURLWithPath:imgFilePath];
            NSURLRequest *request = [NSURLRequest requestWithURL:url];
            [_webView loadRequest:request];
        }
    }];
    [_downloadTask resume];

取消下载

[_downloadTask cancel];
    _downloadTask = nil;

9.获取元素在数组中的位置

[myArray indexOfObject:num]

10.关于引用c文件时候的错误,最方法的做法是将.c文件修改为.m。具体参考http://www.jianshu.com/p/66eeefdbc246

11.利用正则表达式来解决字符串替换一个范围内的内容

    NSRegularExpression *regExp = [[NSRegularExpression alloc] initWithPattern:@"[0-9A-Z]."
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:nil];
    NSString *aaa = [regExp stringByReplacingMatchesInString:model.accountNum
                                                 options:NSMatchingReportProgress
                                                   range:NSMakeRange(0, model.accountNum.length - 3)
                                            withTemplate:@"**"];

12.字符串前空格

if (_nameTF.text.trim.length == 0) {
        [Tool HUDShowAddedTo:self.view withTitle:@"收件人姓名开头不能输入空格" delay:1.5];
        return;
    }

13.只让输入字母和数字的键盘

UIKeyboardTypeASCIICapable

14.textfield中禁止输出空格

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if (textField == _pinpaiTF) {
        NSString *tem = [[string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]componentsJoinedByString:@""];
        if (![string isEqualToString:tem]) {
            return NO;
        }
    }
    return YES;
}

15.设置uitextfield为圆角不透明

textFiled1.borderStyle=UITextBorderStyleRoundedRect

16.判断是否是真机还是模拟器

TARGET_IPHONE_SIMULATOR
TARGET_OS_IPHONE

17.获取设备名字

[[UIDevice currentDevice] name];

18获取设备上的信息,包括创建的唯一标识

这个作者写的挺好的,我也试过了可以的,http://www.jianshu.com/p/a7018a6d107b

19.NSData转字符串,为空,是因为encoding不对,里面的内容应该不是汉字,用如下方法

NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding (kCFStringEncodingGB_18030_2000); 
NSString *rawString=[[NSString alloc]initWithData:inData encoding:enc]; 

20.二维码扫描

下面的链接是github地址,写的挺好的,原生的,view的背景可换成黑色,就不会白色一闪了。
[https://github.com/liutongchao/LCQRCodeUtil]

21.图片的裁剪

- (UIImage*)imageWithImage:(UIImage*)image scaledToSize: (CGSize)newSize
{
    //下面方法,第一个参数表示区域大小。第二个参数表示是否是非透明的。如果需要显示半透明效果,需要传NO,否则传YES。第三个参数就是屏幕密度了
    UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale);

    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];

    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

     return scaledImage;   //返回的就是已经改变的图片
 }

22.获取当前时区,北京时间

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    [formatter setDateFormat : @"yyyy.MM.dd"];
    NSDate *dateTimeOne = [formatter dateFromString:_timeStringOne];

23.强行禁止侧滑(说多了都是泪)

id traget = self.navigationController.interactivePopGestureRecognizer.delegate;
UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:traget action:nil];
[self.view addGestureRecognizer:pan];

直接将代码拷贝到viewDidLoad总就行了

24 将label中的某段话的颜色改变

 telLabel.text = @"如有疑问请联系客服 12345677";
    NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:telLabel.text];
    [str addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0,9)];
    telLabel.attributedText = str;

25.修改button中部分字体颜色

NSString*str =@"已有账号,去登录";
    NSMutableAttributedString* attributedString1 = [[NSMutableAttributedString alloc]initWithString:str];
    [attributedString1 addAttribute:NSForegroundColorAttributeName value:BSColor(25, 130, 210, 1.0)range:NSMakeRange(0,5)];
    [registerBtn setAttributedTitle:attributedString1 forState:UIControlStateNormal];
    [registerBtn sizeToFit];

26 Xcode没有提示

1.找到 这个 DerivedData 文件夹 删除 (路径: ~/Library/Developer/Xcode/DerivedData)
2.删除这个 com.apple.dt.Xcode 文件 (路径: ~/Library/Caches/com.apple.dt.Xcode)
3.重启xcode即可

27.xcode中pch的相对路径的设置

有时候我们本地复制一个工程,作为版本记录,他的pch还是指向原来工程的路径,这个时候,我们修改一下pch的路径,$(SRCROOT)/工程名称/文件夹/pch

28.textfield的代理方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

获取textfield的值

NSMutableString *textString = [textField.text mutableCopy];
  [textString replaceCharactersInRange:range withString:string];

29.tableView加了个footerview,滑不到底部的问题

_tableView.contentInset = UIEdgeInsetsMake(0, 0, 67, 0);

设置一下上面的代码即可

30.数组倒叙

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",nil];  
//2.倒序的数组  
NSArray* reversedArray = [[array reverseObjectEnumerator] allObjects];  

31 启动页封装比较好的

github地址:https://github.com/CoderZhuXH/XHLaunchAd

32.自定义相机功能,底层的一些东西,看下面两个文章

https://www.2cto.com/kf/201409/335951.html 还有 https://www.cnblogs.com/carlos-mm/p/6524604.html,前者是摄像头反转的问题,后者是相机上加自定义的框,裁剪。

33.禁止侧滑

id traget = self.navigationController.interactivePopGestureRecognizer.delegate;
    UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:traget action:nil];
    [self.view addGestureRecognizer:pan];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容