开发小技巧

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

1、禁止第三方键盘

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

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

2、禁止系统的面板

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

开发小技巧_第1张图片
3.36.57.png
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{
UIMenuController * menu = [UIMenuController sharedMenuController];
if (menu) {
    [UIMenuController sharedMenuController].menuVisible = NO;
}
return NO;
}

3、点击部分文字响应

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

开发小技巧_第2张图片
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 *)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 = @[
                     @"http://upload-images.jianshu.io/upload_images/31282-390513513494ede8.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240",
                     @"http://upload-images.jianshu.io/upload_images/1931381-12109e9d6666bb0e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240",
                     @"http://upload-images.jianshu.io/upload_images/3375207-6adc6a22441681ce.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240",
                     @"http://upload-images.jianshu.io/upload_images/3375207-6adc6a22441681ce.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240",
                     @"http://upload-images.jianshu.io/upload_images/1336788-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];
}

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

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

你可能感兴趣的:(开发小技巧)