第一篇在簡書上的文章,以前都是寫在博客上,但是也得跟上時代的步伐不是..雖然有點晚 ? -.-
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;
}