*- 捡起初心, 慢慢走,希望自己好好努力,志于不用工作的人 *
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];
}
网友评论