美文网首页
iOS中的一些小功能和技巧

iOS中的一些小功能和技巧

作者: 凡尘一笑 | 来源:发表于2016-08-22 09:41 被阅读177次

    1:拨打电话

    方式一
      NSURL *url = [NSURL URLWithString:@"tel://4000-916-416"];
                [[UIApplication sharedApplication] openURL:url];
    
    方式一是最直接拨打电话,存在一个缺点:打电话结束之后,会停留在通讯录界面,不会跳转到APP界面
    方式二
     NSURL *url = [NSURL URLWithString:@"telprompt://4000-916-416"];
                [[UIApplication sharedApplication] openURL:url];
    
    方式二,会弹出一个提示框,我们的电话号码是4-3-4的格式,但提示框的号码是3-3-4,而且这个存在一个问题是,访问私有的API,很可能存在上架时候被拒
    Snip20160822_5.png
    方式三:
      if (_webView == nil) {
                    _webView = [[UIWebView alloc] initWithFrame:CGRectZero];
                }
                [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"tel://4000-916-416"]]];
    
    方式三:这个是通过内嵌一个UIWebView来实现,打完电话后,会回到应用

    2.发短信

    第一种方法
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://110"]];
    
    第一种方法存在的缺点:不能回到应用,而且不能指定内容
    第二种方法,利用第三方框架

    1、导入 MessageUI.framework 框架。
    2、引入头文件 #import <MessageUI/MessageUI.h> ,实现代理方法 <MFMessageComposeViewControllerDelegate> 。

    - (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
    
        [self dismissViewControllerAnimated:YES completion:nil];
    
        switch (result) {
            case MessageComposeResultCancelled:
                NSLog(@"取消发送");
                break;
    
            case MessageComposeResultSent:
                NSLog(@"已发送");
                break;
    
            case MessageComposeResultFailed:
                NSLog(@"发送失败");
                break;
    
            default:
                break;
        }
    }
    

    3.发送短信方法

    - (void)showMessageView:(NSArray *)phones title:(NSString *)title body:(NSString *)body
    {
        if([MFMessageComposeViewController canSendText]) {
            MFMessageComposeViewController * controller = [[MFMessageComposeViewController alloc] init];
            // --phones发短信的手机号码的数组,数组中是一个即单发,多个即群发。
            controller.recipients = phones;
            // --短信界面 BarButtonItem (取消按钮) 颜色
            controller.navigationBar.tintColor = [UIColor redColor];
            // --短信内容
            controller.body = body;
            controller.messageComposeDelegate = self;
            [self presentViewController:controller animated:YES completion:nil];
        }
        else
        {
    
            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil
                                                                                     message:@"该设备不支持短信功能"
                                                                              preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *alertAction = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleCancel handler:nil];
            [alertController addAction:alertAction];
    
            [self presentViewController:alertController animated:YES completion:nil];
    
        }
    }
    

    4.回调

     [self showMessageView:[NSArray arrayWithObjects:@"110", nil] title:@"test" body:@"谢谢浏览凡尘一笑的文章,如果喜欢请收藏,关注,小编会不定时为您更新"];
    

    3.更换NSLog

    我们在开发阶段经常会使用NSLog来做打印调试,一个项目下来就存在好多打印,但是在发布阶段是需要将这些打印删除的,由于我们在开发中很多打印自己有时候都很难找得到,所以我们可以自己用一个来代替NSLog

    在PCH文件里面使用这个,然后就可以使用SLLog来代替NSLog
    /*** 日志 ***/
    #ifdef DEBUG
    #define SLLog(...) NSLog(__VA_ARGS__)
    #else
    #define SLLog(...)
    #endif
    
    其实这个意思就是如果在调试阶段我们就使用SLLog来代替NSLog 如果在发布阶段,SLLog 就用空来代替,意思是没有使用打印调试

    刚才写到了一个DEBUG 这个宏 这里突然又想和大家分享一点宏的知识,我们在定义宏时候,是可以访问到宏的


    Untitle.gif
    但是有时候,却发现一些访问不到,比如下面这样,然后你可能找了很久

    也找不多。


    Untitlef.gif
    其实要这样找才能找得到
    Snip20160822_12.png

    4.PCH的一个注意细节

    #ifndef PrefixHeader_pch
    #define PrefixHeader_pch
    
    /*** 如果希望某些内容能拷贝到任何源代码文件(OC\C\C++等), 那么就不要写在
    #ifdef __OBJC__和#endif之间 ***/
    
    
    /***** 在#ifdef __OBJC__和#endif之间的内容, 只会拷贝到OC源代码文件中, 不会拷贝到其他语言的源代码文件中 *****/
    #ifdef __OBJC__
    
    
    #endif
    /***** 在#ifdef __OBJC__和#endif之间的内容, 只会拷贝到OC源代码文件中, 不会拷贝到其他语言的源代码文件中 *****/
    
    
    #endif
    

    /*** 如果希望某些内容能拷贝到任何源代码文件(OC\C\C++等), 那么就不要写在#ifdef OBJC和#endif之间,如果写在了里面的话会报下面这个错误 ***/

    Snip20151105_8.png

    5.颜色相关的宏

    刚才小编给大家写那个宏的时候,写着写着就想多写一些其他东西,这个给大家写一下颜色相关的宏

    
    /*** 颜色 ***/
    #define SLColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:a/255.0]
    
    /*** RGB颜色 ***/
    #define KRGB(r, g, b) SLColor((r), (g), (b), 255)
    //整个项目背景颜色
    #define ALLbackGroundColor KRGB(221, 226, 229)
    /*** 随机颜色 ***/
    #define RandomColor KRGB(arc4random_uniform(256), arc4random_uniform(256), arc4random_uniform(256))
    
    这里注意需要先写第一个,不让后面的宏就调用不到上面的第一个宏,因为顺序是由上到下来读的。注意这面的r g b 添加()的作用是为了严谨性,有时候写到 23 + 54这样就会存在逻辑运算符的顺序的问题,所以在定义宏的时候,给加上()

    6.将数据写成Plist

    来看一下基本的方法

    这是接口:http://192.168.2.226:8090/api/financeapp/finance/getBids 
    
    需要拼接的参数
    pageId=1
    pageSize=20
    所以我们会把接口和参数一块拼接起来变成这样
    http://192.168.2.226:8090/api/financeapp/finance/getBids/pageId=1/pageSize=20
    然后放到goole浏览器,当然前提是浏览器装了插件
    
    Snip20160822_16.png
    当然这样去查看解析的数据也是不错的,只不过要一步一步拼接参数有点麻烦

    下面告诉大家其实也可以用代码实现,直接生成一个plist文件在桌面

    Snip20160822_17.png

    然后将桌面的plist文件点开就是这样

    Snip20160822_18.png

    生成这个文件之后把刚才写的代码删除(避免重复创建)当然您喜欢也可以写成宏放到PCH文件里面,这里告诉大家怎么定义成宏,然后使用起来方便

    Snip20160822_21.png

    写成宏之后的使用

    Snip20160822_24.png

    7.UITableViewcell的背景色的设置

    我们不应该直接使用cell.backgroundColor。Cell本身是一个UIView,我们所看到的部分其实只是它的一个Subview,也就是cell.contentView。所以,如果直接改变cell本身的背景色,依然会被cell.contentView给覆盖,没有效果。 所以,最好的方式应该是通过cell.backgroundView来改变cell的背景。按照文档说明,backgroundView始终处于cell的最下层,所以,将cell里的其它subview背景设为[UIColor clearColor],以cell.backgroundView作为统一的背景,应该是最好的方式。

      UIView *view = [[UIView alloc] init];
            view.backgroundColor = [UIColor redColor];
            cell.backgroundView = view;
    

    但是小编在Xcode7.3的时候,试了一下,好像可以直接设置cell.backgroundColor也有用,其实在Xcode5之前是必须要这样设置的

    8.仅仅只隐藏第一级导航栏,这个基础上,第二级的导航栏不要隐藏

    Untitle.gif
    - (void)viewWillAppear:(BOOL)animated {
        [self.navigationController setNavigationBarHidden:YES animated:animated];
        [super viewWillAppear:animated];
    }
    
    - (void)viewWillDisappear:(BOOL)animated {
        [self.navigationController setNavigationBarHidden:NO animated:animated];
        [super viewWillDisappear:animated];
    }
    
    

    9.修改状态栏为白色

    在iOS9.0之前要通过这样设置


    CBD985D7-5BB2-46EC-BE9A-1193EAEC5D47.png

    然后在AppDelegate.m中加上一句代码


    5B702A76-BA11-4288-87A7-BD167C4097E0.png
    这里会警告是因为我这里是iOS9.3了.估计在iOS10之后这个方法就废弃了,
    但是很值得注意的是如果你使用点语法却不会出现警告 Snip20160823_11.png

    然后在AppDelegate.m中加上一句代码


    Snip20160823_10.png

    现在是使用的是这个方法

    -(UIStatusBarStyle)preferredStatusBarStyle
    {
        return UIStatusBarStyleLightContent;
    }
    

    10.启动页面时候,状态栏隐藏

    只需要在info.plist中设置一下就可以了,同时,别忘记了在AppDelegate.m中加一句代码

    第一步:


    Snip20160823_14.png

    第二步:


    Snip20160823_17.png

    11.修改UILable的某部分字颜色

    - (void)touchesEnded:(NSSet<UITouch> *)touches withEvent:(UIEvent *)event
    {
        [self editStringColor:self.label.text editStr:@"好" color:[UIColor blueColor]];
    }
     
    - (void)editStringColor:(NSString *)string editStr:(NSString *)editStr color:(UIColor *)color {
        // string为整体字符串, editStr为需要修改的字符串
        NSRange range = [string rangeOfString:editStr];
     
        NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc] initWithString:string];
     
        // 设置属性修改字体颜色UIColor与大小UIFont
        [attribute addAttributes:@{NSForegroundColorAttributeName:color} range:range];
     
        self.label.attributedText = attribute;
    }
    

    12.调整UITableView的那个分割线位置

    tableView.separatorInset = UIEdgeInsetsMake(0, 100, 0, 0);
    

    13.导航栏随着滑动时候就隐藏显示

     self.navigationController.hidesBarsOnSwipe = YES;
    

    效果图


    Untitle.gif
    上面导航栏随着滑动就隐藏的方法。我们也可以自己通过代码实现
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
        CGFloat offsetY = scrollView.contentOffset.y + _tableView.contentInset.top;
        CGFloat panTranslationY = [scrollView.panGestureRecognizer translationInView:self.tableView].y;
        if (offsetY > 64) {
            if (panTranslationY > 0)
            {
                //下滑趋势,显示
                [self.navigationController setNavigationBarHidden:NO animated:YES];
            } else {
                //上滑趋势,隐藏
                [self.navigationController setNavigationBarHidden:YES animated:YES];
            }
        } else {
            [self.navigationController setNavigationBarHidden:NO animated:YES];
        }
    }
    

    效果图


    Untitle.gif

    14.解决UITableViewcell分割线短了一小段的问题

    默认情况是样的


    Snip20160824_1.png

    在控制器中加上下面这段代码

    -(void)viewDidLayoutSubviews{
        if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)])
        {
            [self.tableView setSeparatorInset:UIEdgeInsetsMake(0,0,0,0)];
        }
        if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)])
        {
            [self.tableView setLayoutMargins:UIEdgeInsetsMake(0,0,0,0)];
        }
    }
    
    -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
        if ([cell respondsToSelector:@selector(setSeparatorInset:)])
        {
            [cell setSeparatorInset:UIEdgeInsetsZero];
        }
        if ([cell respondsToSelector:@selector(setLayoutMargins:)])
        {
            [cell setLayoutMargins:UIEdgeInsetsZero]; 
        }
    }
    
    Snip20160824_2.png

    15.UITableView的索引背景色

    - (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {      
      
      for(UIView *view in [tv subviews])  
      {  
        if([[[view class] description] isEqualToString:@"UITableViewIndex"])  
        {  
      
          [view setBackgroundColor:[UIColor whiteColor]];  
          [view setFont:[UIFont systemFontOfSize:14]];  
        }  
      }  
      
      //rest of cellForRow handling...  
      
    }  
    

    16:修改了系统自带头文件后,Xcode会报错,需要清除缓存

    /Users/电脑名的用户名/资源库/Developer/Xcode/DerivedData
    例如:/Users/kevindemac/Library/Developer/Xcode/DerivedData
    这里要注意kevindemac就是Finder里面的个人
    来到这个文件夹下:删除文件夹的缓存就👌
    

    17:计算文字的宽度

        NSString *string = @"哇哈哈";
        CGFloat stringWidth = [string sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]}].width;
        NSLog(@"%f",stringWidth);
    总结:CGFloat titleW = [字符串 sizeWithAttributes:@{NSFontAttributeName : 字体大小}].width;
    

    18:文字内容换行

    - 如何让storyboard\xib中的文字内容换行
        - 快捷键: option + 回车键:也就是你键盘上的Ctrl
        - 在storyboard\xib输入\n是无法实现换行的
    - 在代码中输入\n是可以实现换行的
    

    19:有透明度的颜色

    [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.2];
    [UIColor colorWithWhite:1.0 alpha:0.2];
    [[UIColor whiteColor] colorWithAlphaComponent:0.2];
    

    20:解决tableView出现多余行的问题

    比如出现这种情况:

      self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
    

    21:UIimageView的创建问题

    //第一种创建方式:图片本身是多大创建出来的图片就是多大
      UIImageView *image1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"friendTrends_icon"]];
        image1.center = CGPointMake(100, 100);
        [self.view addSubview:image1];
     //第二种创建方式:给定图片尺寸是多大创建出来就是多大,这样图片就可能会拉伸
        UIImageView *image2 = [[UIImageView alloc] init];
        image2.frame = CGRectMake(100, 100, 30, 30);
        image2.image = [UIImage imageNamed:@"friendTrends_icon"];
        [self.view addSubview:image2];
    

    22:按钮大小和图片大小一致( 这个前提是自己添加了那个分类才可以直接拿到size)

       btn.LYW_size = [UIImage imageNamed:@"MainTagSubIcon"].size;
       btn.LYW_size = [btn imageForState:UIControlStateNormal].size;
       btn.LYW_size = btn.currentImage.size;
       [btn sizeToFit];
    
    

    23:json 字符串

    我们在使用post时候不一定就是简单的字典,比如这种就是json字符串

    {
        "token": "0831E5A2E4734AFDB90972CC0E0AEE83" ,
        "authItemInfo":{
                        "itemId": "17",////认证项目
                                //********手机认证      
                        "cellNumber": "18620300073", //手机号
                        "cellPassword": "831104",//服务密码
                                //京东认证
                        "jdAccount": " jdAccount",//京东账号
                        "jdPassword": "jdPassword", //京东密码
                        "captcha": "captcha",//网站短信验证码(根据流程码process_code动态输入)
                        "queryPwd": "queryPwd", //查询密码(仅北京移动会出现,官网的客服密码,根据流程码process_code动态输入)
                                            //******学历认证
                        "chsiAccount": " chsiAccount",//学信网账号
                        "chsiPassword": "chsiPassword",//学信网密码
                                        //****身份证,工作证明
                        "authFiles": [
                            {
                                "fileType": 1,
                                "fileName": "/data/uploads/cert/2016/07/21/15/97de1236421531f37ceed4a4b1767b5c.jpg"
                            },
                            {
                                "fileType": 1,
                                "fileName": "/data/uploads/cert/2016/07/21/15/eb41c0c14ae28bc76a34b823fe6dc962.jpg"
                            },
                            {
                                "fileType": 1,
                                "fileName": "/data/uploads/cert/2016/07/21/15/e9e85f991d6fc24743147b7e45f37035.jpg"
                            }
                        ]
                    }
                }   
    

    需要这样转换后上传

     NSString *url = [NSString stringWithFormat:@"%@/saveAuthItem",SDLOAN_URL];
            NSDictionary *dictPlace =@{@"itemId":@"7",
                                       @"authFiles":@[                                           @{@"fileName":_aliIDCardOne,@"fileType":@"1",@"position":@(1)},
                                         @{@"fileName":_aliIDCardTwo,@"fileType":@"1",@"position":@(2)}]};
        NSError *errors;
            NSData *jsonDatas = [NSJSONSerialization dataWithJSONObject:dictPlace options:NSJSONWritingPrettyPrinted error:&errors];
            NSString *jsonStrings = [[NSString alloc] initWithData:jsonDatas encoding:NSUTF8StringEncoding];
            NSDictionary *params = @{@"token":Token,@"authItemInfo":jsonStrings};
    

    或者如果导入了MJExtension的话,可以这样转

    NSString *json = dictPlace.mj_JSONString;
    

    另外自己可以写两个方法去转JSON字符串

    
    //数组转JSON字符串
    + (NSString *)arrayToJSONString:(NSArray *)array
    {
       NSError *error = nil;
       //    NSMutableArray *muArray = [NSMutableArray array];
       //    for (NSString *userId in array) {
       //        [muArray addObject:[NSString stringWithFormat:@"\"%@\"", userId]];
       //    }
       NSData *jsonData = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:&error];
       NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
       //    NSString *jsonTemp = [jsonString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
       //    NSString *jsonResult = [jsonTemp stringByReplacingOccurrencesOfString:@" " withString:@""];
       //    NSLog(@"json array is: %@", jsonResult);
       return jsonString;
    }
    
    //字典转JSON字符串
    + (NSString *)dictionaryToJSONString:(NSDictionary *)dictionary
    {
       NSError *error = nil;
       NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];
       NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
       //    NSString *jsonTemp = [jsonString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
       //    NSString *jsonResult = [jsonTemp stringByReplacingOccurrencesOfString:@" " withString:@""];
       return jsonString;
    }
    
    
    

    24:复制

    UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
        pasteBoard.string = @"1234567890";
    

    25.TableView的自适应高度

    #注意,这两行代码是TableView的自适应高度
            _tableView.estimatedRowHeight = 100;
            _tableView.rowHeight = UITableViewAutomaticDimension;
    

    26:

    一个#号在宏中的定义是“ ”双引号
    两个#号的意思是拼接
    
    

    27:

    CFBundleShortVersionString 标识应用程序的发布版本号。这个版本号是由三个时期分割的整数组成的字符串。第一个整数代表重大修改的版本,例如实现新的功能或重大变化的修订;第二个整数表示修订,实现较突出的特点;第三个整数代表维护版本。该键的值不同于“CFBundleVersion”标识。
    
    CFBundleVersion 标识内部版本号,可以是发布了的,也可以是还未发布的。这是一个单调增加的字符串,包括一个或多个时期分隔的整数。
    

    28:调整UILable行间距

    NSMutableAttributedString* attrString = [[NSMutableAttributedString  alloc] initWithString:label.text];    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
        [style setLineSpacing:20];
        [attrString addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, label.text.length)];    label.attributedText = attrString;
    

    28:调用调用UIImagePickerController显示中文英文的问题

    调用UIImagePickerController.png

    29:图片和字符串之间的转换

    //图片转字符串
    + (NSString *)UIImageToBase64Str:(UIImage *) image
    {
        NSData *data = UIImageJPEGRepresentation(image, 5.0f);
        NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
        return encodedImageStr;
    }
    
    //字符串转图片
    + (UIImage *)Base64StrToUIImage:(NSString *)_encodedImageStr
    {
        NSData *_decodedImageData = [[NSData alloc] initWithBase64Encoding:_encodedImageStr];
        UIImage *_decodedImage = [UIImage imageWithData:_decodedImageData];
        return _decodedImage;
    }
    

    类似安卓提示消息

    + (void)showMessage:(NSString *)message
    {
        UIWindow * window = [UIApplication sharedApplication].keyWindow;
        UIView *showview =  [[UIView alloc]init];
        showview.backgroundColor = [UIColor blackColor];
        showview.frame = CGRectMake(1, 1, 1, 1);
        showview.alpha = 1.0f;
        showview.layer.cornerRadius = 5.0f;
        showview.layer.masksToBounds = YES;
        [window addSubview:showview];
        
        UILabel *label = [[UILabel alloc]init];
        CGSize LabelSize = [message sizeWithFont:[UIFont systemFontOfSize:17] constrainedToSize:CGSizeMake(320, 9000)];
        label.frame = CGRectMake(10, 5, LabelSize.width, LabelSize.height);
        label.text = message;
        label.textColor = [UIColor whiteColor];
        label.textAlignment = 1;
        label.backgroundColor = [UIColor clearColor];
        label.font = [UIFont boldSystemFontOfSize:15];
        [showview addSubview:label];
        showview.frame = CGRectMake((LYWScreenWidth - LabelSize.width - 20)/2, LYWScreenHeight - 100, LabelSize.width+20, LabelSize.height+10);
        [UIView animateWithDuration:3 animations:^{
            showview.alpha = 0;
        } completion:^(BOOL finished) {
            [showview removeFromSuperview];
        }];
    }
    

    判断字符串为空

    + (BOOL)isBlankString:(NSString *)string
    {
        if (string == nil || string == NULL)
        {
            return YES;
        }
        
        if ([string isKindOfClass:[NSNull class]])
        {
            return YES;
        }
        
        if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0)
        {
            return YES;
        }
        return NO;
    }
    

    检测代码量

    用命令行 先进入cd 项目 再输入以下代码

    find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.h" -or -name "*.rss" ")" -print | xargs wc -l
    

    或者使用GitHub 上别人写的一个东西

    https://github.com/976971956/DEMOlineNUM
    

    改变 UITextField 占位文字 颜色

    [_userName setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];
    

    禁止横屏 在Appdelegate 使用

    - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window  
    {  
        return UIInterfaceOrientationMaskPortrait;  
    }
    

    修改状态栏颜色 (默认黑色,修改为白色)

    1.在Info.plist中设置

    UIViewControllerBasedStatusBarAppearance 为NO
    

    在需要改变状态栏颜色的 AppDelegate中在 didFinishLaunchingWithOptions 方法中增加:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    

    如果需要在单个ViewController中添加,在ViewDidLoad方法中增加:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    

    模糊效果

        UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
        UIVisualEffectView *test = [[UIVisualEffectView alloc] initWithEffect:effect];
        test.frame = self.view.bounds;
        test.alpha = 0.5;
        [self.view addSubview:test];
    

    前往设置

     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    

    系统的分享

        UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[@"1",@"2",@"3"] applicationActivities:nil];
        activityVC.view.backgroundColor = [UIColor clearColor];
        activityVC.excludedActivityTypes = @[UIActivityTypePrint,UIActivityTypeAssignToContact,UIActivityTypeAddToReadingList,UIActivityTypeAirDrop];
        
        [self presentViewController:activityVC animated:YES completion:nil];
    

    抓包

    http://www.jianshu.com/p/5539599c7a25
    

    手机运营商

    
    -(void)getcarrierName{
        CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init];
        CTCarrier *carrier = [telephonyInfo subscriberCellularProvider];
        NSString *currentCountry=[carrier carrierName];
        NSLog(@"[carrier isoCountryCode]==%@,[carrier allowsVOIP]=%d,[carrier mobileCountryCode=%@,[carrier mobileCountryCode]=%@",[carrier isoCountryCode],[carrier allowsVOIP],[carrier mobileCountryCode],[carrier mobileNetworkCode]);
        NSLog(@"运营商:%@",currentCountry);
    }
    

    url中带中文

    // UIWebView加载不出后台返回的url地址。是因为url中带有中文的原因,需要解码。
    NSCharacterSet *set = [NSCharacterSet URLQueryAllowedCharacterSet];
    NSString *encodedString = [self.url stringByAddingPercentEncodingWithAllowedCharacters:set];
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:encodedString]]];
    

     1.获取identifierForVendor标示手机
        NSString *identifierForVendor = [[UIDevice currentDevice].identifierForVendor UUIDString];
    http://blog.csdn.net/u014220518/article/details/50509559
    
    Xcode编译报错: 
    This application’s application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed.
    
    原因:两次编译的用的证书不一致。
    

    数组去除相同元素

      NSArray *dataArray = @[@"1",@"1",@"2",@"3",@"4",@"1"];
        
        NSMutableArray *resultArray = [[NSMutableArray alloc] initWithCapacity:dataArray.count];
        // 外层一个循环
        for (NSString *item in dataArray) {
            // 调用-containsObject:本质也是要循环去判断,因此本质上是双层遍历
            // 时间复杂度为O ( n^2 )而不是O (n)
            if (![resultArray containsObject:item]) {
                [resultArray addObject:item];
            }
        }
        NSLog(@"resultArray: %@", resultArray);
    

    数组的四种遍历方式

        /// 以数组为例 实现下面4种遍历
        NSArray *array = @[@"1", @"2", @"3"];
        
        /// 遍历方式1 常规for循环
        for (NSInteger i = 0; i < [array count]; i++) {
            NSLog(@"%@", array[i]);
        }
        
        /// 遍历方式2 Objective-C 1.0 的NSEnumerator
        NSEnumerator *enu = [array objectEnumerator];
        id next = nil;
        while ((next = enu.nextObject) != nil) {
            // 当next为nil时 遍历结束
            NSLog(@"%@", next);
        }
        
        /// 遍历方式3 Objective-C 2.0 引入的for-in
        for (id obj in array) {
            NSLog(@"%@", obj);
        }
        
        /// 遍历方式4 最新的块遍历
        [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            // stop为YES时 结束遍历
            if (*stop == NO) {
                NSLog(@"%@", obj);
            }
        }];
    

    cell的点击颜色

    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
    //        [self setupView];
            [self setupCustomCellSelectedColor];
        }
        return self;
        
    }
    - (void)awakeFromNib {
        [super awakeFromNib];
        // Initialization code
        [self setupCustomCellSelectedColor];
    
    }
    调用该方法
    - (void)setupCustomCellSelectedColor
    {
        CGRect rect = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
        UIGraphicsBeginImageContext(rect.size);
        CGContextRef context = UIGraphicsGetCurrentContext();
        //高亮颜色值
        UIColor *selectedColor = [UIColor redColor];
        CGContextSetFillColorWithColor(context, [selectedColor CGColor]);
        CGContextFillRect(context, rect);
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        self.selectedBackgroundView = [[UIImageView alloc] initWithImage:image];
    }
    

    [iOS 11 UIScrollView的新特性(automaticallyAdjustsScrollViewInsets 不起作用了)]

    解决方法

        if (@available(iOS 11.0, *)) {
            
            _scroll.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
            
        } else {
            
            self.automaticallyAdjustsScrollViewInsets = NO;
    
        }
    

    swift自定义Log

    
    func LYWLog<T>(_ message:T,file:String = #file,funcName:String = #function,lineNum:Int=#line)  {
        
        let fileName = (file as NSString).lastPathComponent
        
        print("\(fileName):[\(funcName)](\(lineNum)-\(message))")
    }
    

    Error returned in reply: Connection invalid

    解决方法:把Xcode 以及模拟器全部关掉 从新启动一个Xcode就好了
    
    ERROR ITMS-90096: "Your binary is not optimized for iPhone 5 - New iPhone apps and app updates submitted must support the 4-inch display on iPhone 5 and must include a launch image referenced in the Info.plist under UILaunchImages with a UILaunchImageSize value set to {320, 568}. Launch images must be PNG files and located at the top-level of your bundle, or provided within each .lproj folder if you localize your launch images. Learn more about iPhone 5 support and app launch images by reviewing the 'iOS Human Interface Guidelines' at https://developer.apple.com/ios/human-interface-guidelines/graphics/launch-screen."
    

    特么的要是遇到这个问题,别特么听网上一大堆的解决方案,说白了就是你的启动图片不对。要么启动图片的尺寸不对,要么就是图片中不是png的图片。

    关于移动硬盘无法修改资料的问题

    http://www.pc6.com/mac/117369.html
    

    备注:

    如果有不足或者错误的地方还望各位读者批评指正,可以评论留言,笔者收到后第一时间回复。

    QQ/微信:2366889552 /lan2018yingwei。

    简书号:凡尘一笑:[简书]

    http://www.jianshu.com/users/0158007b8d17/latest_articles

    感谢各位观众老爷的阅读,如果觉得笔者写的还凑合,可以关注或收藏一下,不定期分享一些好玩的实用的demo给大家。

    文/凡尘一笑(简书作者)

    原文链接: http://www.jianshu.com/p/8ae080edb3ea

    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

    相关文章

      网友评论

          本文标题:iOS中的一些小功能和技巧

          本文链接:https://www.haomeiwen.com/subject/yobwsttx.html