工作问题随笔

第一篇在简书上的文章,以前都是写在博客上,但是也得跟上时代的步伐不是..虽然有点晚   -.-

1.在searchBar上的UIText中字符串不能及时获取问题,只需要把获取的string转换成可变字符串就可以

NSMutableString*newtxt = [NSMutableStringstringWithString:textField.text];

[newtxtreplaceCharactersInRange:rangewithString:string];

2.Tableview不识别touchesBegan方法

UITableView是不会响应touchesBegan:withEvent:之类的UIResponder的方法的。因此,加在其上的所有视图的响应者链就断了。如果在UITableView其上加任何的自身不具备类似UIButton一样有目标动作机制的UIView及其子类控件的时候,这个控件也不会响应touchesBegan:withEvent:方法。即便是设置该控件的userInteractionEnabled为YES也没用。

如此一来,如果想要这些控件具有交互性能怎么办?有一种很直观的方法,给这个控件加上手势识别器。

- (void)addAGesutreRecognizerForYourView

{

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesturedDetected:)]; // 手势类型随你喜欢。

tapGesture.delegate = self;[yourView addGestureRecognizer:panGesture];

}

- (void)tapGesturedDetected:(UITapGestureRecognizer *)recognizer

{

// do something

}

3.SDWebImage的三级缓存,大量图片是否造成APP crash

首先检查了SDWebImage代码中对于memory warning的处理:

- (void)clearMemory {

[self.memCache removeAllObjects];

}

其中self.memCache是NSCache类型的,可以看到SDWebImage本身对内存警告执行了操作,但是并没有什么X用。

可以看到内存基本都在decodedImageWithImage:这个方法里被占用了

在使用SDWebImage加载较多图片造成内存警告时,定期调用

[[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];

可解决。

4.Didload里面直接show一个UIAlertController 会显示不出来

刚步入iOS开发会遇到这个问题,警告是 viewcontroll没有被加载

非常典型的一个生命周期问题,把show UIAlertController 这个操作放在ViewDidApear中,等待当前视图控制器加载完了之后再调用UIAlertController控制器,这样的话就可以调用了.

5.模态界面的直接返回父视图的根视图

self.presentingViewController.view.alpha=0;

[self.presentingViewController.presentingViewControllerdismissViewControllerAnimated:YEScompletion:nil];

6.解决cell分割线缺失一段

-(void)viewDidLayoutSubviews {

if([self.tableViewrespondsToSelector:@selector(setSeparatorInset:)]) {

[self.tableViewsetSeparatorInset:UIEdgeInsetsZero];

}

if([self.tableViewrespondsToSelector:@selector(setLayoutMargins:)])  {

[self.tableViewsetLayoutMargins:UIEdgeInsetsZero];

}

}

-(void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPat{

if([cellrespondsToSelector:@selector(setLayoutMargins:)]) {

[cellsetLayoutMargins:UIEdgeInsetsZero];

}

if([cellrespondsToSelector:@selector(setSeparatorInset:)]){

[cellsetSeparatorInset:UIEdgeInsetsZero];

}

7.在模态界面添加timer

主线程,运行时Runloop机制问题,响应者链找不到当前视图控制器的Runloop,需要添加一个线程,把timer放在这个线程的RunLoop中,注意释放.在请求中添加timer会阻塞请求线程,整个APP线程会崩溃

dispatch_async(dispatch_get_global_queue(0,0), ^{

NSTimer*t = [NSTimerscheduledTimerWithTimeInterval:1.0f

target:self

selector:@selector(configureTimerr:)

userInfo:@{@"strTime":strTime,@"endTime":endTime}

repeats:YES];

[[NSRunLoopcurrentRunLoop]addTimer:tforMode:NSDefaultRunLoopMode];

[[NSRunLoopcurrentRunLoop]run];

});

8.init里边初始controller.注册通知.通知无效

通知的结果操作view,还没调用load view,view为nil

9.防止用户多次点击按钮弹窗重复

@synchronized(self){

if (self.view.userInteractionEnabled == NO)

return;

}

self.view.userInteractionEnabled = NO; //防止用户多次点击按钮弹窗重复

10.performSeletor...afterDelay在子线程不能使用

performSeletor...afterDelay这个函数一定要在主线程用,在子线程使用不延迟

11.判断是否有自定义键盘

自定义键盘和第三方键盘的class不一样

NSArray*array = [UITextInputModeactiveInputModes];//获取键盘类型个数

if([[[UIDevicecurrentDevice]systemVersion]floatValue] >=9.0) {

//系统大于9.0的时候,在系统键盘上多了一层layer层可修改

temp = [[[UIApplicationsharedApplication]windows]objectAtIndex:2];

}else{

//系统不大于9.0时候,在系统键盘上没有那一层

temp = [[[UIApplicationsharedApplication]windows]objectAtIndex:1];

}

[tempaddSubview:_dianBT];

12.[UIScreen mainScreen].bounds.size.width值不改变问题

在LaunchImage中必须有Default.png和Default-568h.png文件,如果iOS 检测不到这两个文件就不会根据屏幕尺寸适配

13.tableview和collection view中的手势冲突问题

//- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{

//    DLog(@"1");

//    if ([touch.view isKindOfClass:[UITextField class]])

//    {

//        return NO;

//    }

//    //若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件

//    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {

//        return YES;

//    }

//    return YES;

//}

14.百度地图-雷达搜索坑点

(1) 第一次检索的时候是以当前用户的位置为中心进行检索(默认)

(2) 上传第一次的位置信息是检索不出来的,因为是以最后上传的位置为中心检索

(3) 第二次上传信息之后,可以检索到第一次上传的信息,因为是以第二次上传的位置为中心进行检索,可以检索到第一次的位置信息,但是返回的数组中没有当前上传的信息.

总结:总归当前上传的是查不出来的,因为是默认为中心点的.不上传的话是默认为当前位置

(4) 百度官方中Demo设置雷达的时候,中心点的坐标获取是一个监听,要是用户不移动的话获取不到用户位置,也就获取不到数据(BUG)

(5) 百度周边雷达上传自己位置的时候,上传的备注信息中不能有”/“符号(可能还有其他限制,暂时就知道不能上传”/“),倒是可以上传”-"这个符号

这段代码!!!!

[_mapview showAnnotations:@[_annotation] animated:NO];

会自动把视角移动到这几个标记点上

15.push几种跳转问题(个人认为比较不容易出问题的方式)

(1)     [self.tabBarController.tabBarsetTranslucent:NO];  (在用storyboard时隐藏tabbar)

(2)     yourVC.hidesBottomBarWhenPushed=YES;(在用XIB时隐藏tabbar)

(3)     self.hidesBottomBarWhenPushed=YES;(没有XIB时隐藏tabbar)

16.获取父视图控制器

- (UIViewController*)viewController

{

for(UIView* next = [selfsuperview]; next; next = next.superview) {

UIResponder*nextResponder = [nextnextResponder];

if([nextResponderisKindOfClass:[UIViewControllerclass]]) {

return(UIViewController*)nextResponder;

}

}

returnnil;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、禁止手机睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa阅读 1,148评论 1 6
  • 1、禁止手机睡眠 [UIApplicationsharedApplication].idleTimerDisabl...
    小热狗阅读 929评论 0 2
  • 创建元组 获取元组中的数据 遍历元组 转化成String
    牛马风情阅读 850评论 0 1
  • 同学们陆陆续续地实习,我还待在学校等通知。讨厌这样拖拖拉拉的效率,然而这就是生活,总会有很多莫名其妙的东西,考验人...
    Caylin阅读 151评论 0 1
  • 是灰的一层接一层的高楼,也是扬起又扬起的灰尘。成都,这座古都。对于它,我这个成都郊区的成都乡下人,感情并未有土生土...
    马北田阅读 252评论 0 0