美文网首页iOS
开发小技巧

开发小技巧

作者: 静心_安神 | 来源:发表于2017-01-12 21:10 被阅读292次

    *- 捡起初心, 慢慢走,希望自己好好努力,志于不用工作的人 *

    1、禁止第三方键盘

    在要填密码的地方, 为了安全考虑!要么禁用第三方键盘,要么自定义键盘!

     //禁止第三方键盘的使用
     - (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier{
    return NO;
    } 
    

    2、禁止系统的面板

    手机默认的输入框右键或者选中文字右键会弹出菜单,但是有时候我们在做对文本严格要求的时候 (比如说不能使文字啊),就要关闭这个功能, 只需要在自定义的UITextfield或UITextview里面添加下面这一句话:

    3.36.57.png
    -(BOOL)canPerformAction:(SEL)action withSender:(id)sender{
    UIMenuController * menu = [UIMenuController sharedMenuController];
    if (menu) {
        [UIMenuController sharedMenuController].menuVisible = NO;
    }
    return NO;
    }
    

    3、点击部分文字响应

    有时候你需要在一行文本中点击某几个特殊的文字,来实现跳转网页或者打电话的功能。我的需求是在公告里面要能点击电话。

    4.00.39.png

    我是自定义了一个UITextView实现得,代码如下:

    @implementation FDTextKitVIew
    
    - (instancetype)initWithCoder:(NSCoder *)coder
    {
    self = [super initWithCoder:coder];
    if (self) {
    
    }
    return self;
    }
    
    - (void)setText:(NSString *)text{
    [super setText:text];
    //目标文字是你已知的文字,或者取服务器字段知道的
    NSRange range = [self.text rangeOfString:目标文字];
    
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWithString:text];
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
    [paragraphStyle setLineSpacing:5];
    
    // 行间距
    [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, text.length)];
    //改变电话号码的背景色
    [attributedString addAttribute:NSForegroundColorAttributeName value:DRHColor(48, 121, 255) range:range];
       // 下划线
    [attributedString addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:range];
    [attributedString addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Light" size:16] range:NSMakeRange(0, text.length)];
    self.attributedText = attributedString;
    }
    
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSSet *allTouches = [event allTouches];    //返回与当前接收者有关的所有的触摸对象
    UITouch *touch = [allTouches anyObject];   //视图中的所有对象
    CGPoint point = [touch locationInView:[touch view]];
    
    NSRange range = [self.text rangeOfString:目标文字];
    
     //  self.selectedRange = range;
    // 不能设置是因为 selectedable
    [self setSelectedRange:range];
    
    NSArray * arr = [self selectionRectsForRange:self.selectedTextRange];
    
    for(UITextSelectionRect * textrect in arr){
        if(CGRectContainsPoint(textrect.rect, point)){
          // 这里就是响应的地方
        }
         }
         }
    @end
    

    4、获取网络图片的尺寸

    Paste_Image.png

    以前做这种像帖子详情或想新浪微博的布局时用的不是h5, 都是前端要自己获取图片数组,自己计算图片的宽高做自适应, 当时幸亏找到一个大神写的工具类,全部都是对二进制字节流的计算。
    现在常用这个一个方法:

    NSArray * urlArr = @[
                         @"https://img.haomeiwen.com/i31282/390513513494ede8.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240",
                         @"https://img.haomeiwen.com/i1931381/12109e9d6666bb0e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240",
                         @"https://img.haomeiwen.com/i3375207/6adc6a22441681ce.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240",
                         @"https://img.haomeiwen.com/i3375207/6adc6a22441681ce.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240",
                         @"https://img.haomeiwen.com/i1336788/2ac84707ce22e970.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1080/q/50"];
    
    dispatch_group_t grounp  =  dispatch_group_create();
    for(NSString * str in urlArr){
        // 将当前的下载操作添加到组中
        dispatch_group_enter(grounp);
        // 缓存图片
        [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:str] options:SDWebImageDownloaderUseNSURLCache progress:^(NSInteger receivedSize, NSInteger expectedSize) {
            
        } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
          // 把缓存到本地的img添加到数据, 也可以通过image.size取到宽高比例
            [_arr addObject:image];
            //完成单张图片下载离开当前组
            dispatch_group_leave(grounp);
        }];
    }
    
    dispatch_group_notify(grounp, dispatch_get_main_queue(), ^{
        // 来到这里所有图片都下载完成
       // 更新UI, 就好了
    });
    

    5、清除webviewde的缓存

    - (void)dealloc{
    self.m_WebView = nil;
    
    //清除cookies
    NSHTTPCookie *cookie;
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (cookie in [storage cookies]){
        [storage deleteCookie:cookie];
    }
    //清除UIWebView的缓存
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
    NSURLCache * cache = [NSURLCache sharedURLCache];
    [cache removeAllCachedResponses];
    [cache setDiskCapacity:0];
    [cache setMemoryCapacity:0];
    }
    

    继续努力,捡起技能包!以后会持续更新实用小技巧~

    以后的时间就是好好学,憋大招~~

    相关文章

      网友评论

        本文标题:开发小技巧

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