iOS中容易犯錯的知識點

1.UIView下,UIImageView和UILabel的 userInteractionEnabled 默認是NO,要相應交互,就要設置爲YES
透明的UIView遮擋住了SuperView,使SuperView不能響應點擊事件怎麼辦?把UIView的userInteractionEnabled屬性設置爲NO啊。


2.如果點擊一個父視圖上的子視圖沒有反應,有兩種情況:第一種就是上面的第一點,第二種就是父視圖或子視圖沒有給frame---與---父視圖的frame給錯了,給小了之類的


3.協議三部曲:接入協議--->設置代理--->實現協議方法


4.NSString 轉換成NSData 對象 
NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncoding]; 


5.NSData 轉換成NSString對象 
NSData * data; 
NSString *result = [[NSString alloc] initWithData:data  encoding:NSUTF8StringEncoding]; 

6.UITableView的刷新
[objc] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1.  #pragma mark - 數據發生改變後一定要重新刷新數據  
  2. - (void)viewWillAppear:(BOOL)animated{  
  3.   
  4.     [super viewWillAppear:animated];  
  5.     /** 
  6.      *  clearsSelectionOnViewWillAppear 
  7.      *  這個是它的一個屬性,默認是yes 返回列表頁面的時候,默認取消這行的選中狀態,可是我們已經把這條數據刪除的話,會出問題 
  8.      *  如果你點擊了一行cell,進入下一個頁面,在這個頁面中,我們把本該屬於這行cell的數據給刪了 
  9.      *  如果  self.clearsSelectionOnViewWillAppear = yes,返回前一頁時,會刷新這一行cell,執行cellForRow方法,結果數據卻沒了,就崩潰了 
  10.      *  如果  self.clearsSelectionOnViewWillAppear = no,不會刷新這一行cell,就沒事兒了 
  11.      */  
  12.    self.clearsSelectionOnViewWillAppear =NO;  
  13.     [self.tableView reloadData];---->並不一定要放在這裏,看取得數據在什麼位置,刷新數據在什麼位置  
  14. }  

7.awakeFromNib(storyboard)和 viewDidLoad的區別
awakeFromNib
      當.nib文件被加載的時候,會發送一個awakeFromNib的消息到.nib文件中的每個對象,每個對象都可以定義自己的 awakeFromNib函數來響應這個消息,執行一些必要的操作。也就是說通過nib文件創建view對象是執行awakeFromNib 。
viewDidLoad
      當view對象被加載到內存是就會執行viewDidLoad,所以不管通過nib文件還是代碼的方式創建對象都會執行viewDidLoad。awakeFromNib和viewDidLoad的區別


8.將漢字轉換爲不帶音調的拼音
[objc] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. - (NSString *)transformMandarinToLatin:(NSString *)string  
  2. {  
  3.     NSMutableString *preString = [string mutableCopy];  
  4.     /*轉換成成帶音 調的拼音*/  
  5.     CFStringTransform((CFMutableStringRef)preString, NULL, kCFStringTransformMandarinLatin, NO);  
  6.     /*去掉音調*/  
  7.     CFStringTransform((CFMutableStringRef)preString, NULL, kCFStringTransformStripDiacritics, NO);  
  8.     return preString;  
  9. }  

9.圖片適應問題
有兩個view: view1,view2
view2添加view1到中,如果view2大於view1,或者view2的座標不全在view1的範圍內,view2是蓋着view1的,意思就是超出的部份也會畫出來

UIView有一個屬性,clipsTobounds 默認情況下是NO。
如果,我們想要view2把超出的那部份隱藏起來的話,就得改變它的父視圖也就view1的clipsTobounds屬性值。
view1.clipsTobounds = YES;


10.第三方FMDB數據庫操作問題

Unknown error finalizing or resetting statement (5: database is locked)
在使用fmdb時有時候一不小心沒寫好代碼就會這樣子啦,爲什麼呢,其實呢,應該是在前面代碼中有調用數據庫而且並沒有調用[db close]就直接跳出結果來了,所以在前面的數據庫操作中先運行[db close]再返回數據即可;

[objc] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. 通過註冊鍵盤顯示的消息  
  2. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShown:)  
  3. name:UIKeyboardWillShowNotification object:nil];  
  4.   
  5. - (void)keyboardWillShown:(NSNotification*)aNotification{  
  6.     // 鍵盤信息字典  
  7.     NSDictionary* info = [aNotification userInfo];  
  8. }  

11. 改變導航欄中間標題顏色

[objc] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. UIColor * color = [UIColor whiteColor];  
  2.    NSDictionary * dict = [NSDictionary dictionaryWithObject: colorforKey:NSForegroundColorAttributeName];  
  3.    self.navigationController.navigationBar.titleTextAttributes = dict;  

12.UIWebView要實現橫向滑動,跟UIWebview的增高沒有關係,你需要設定UIWebView的屬性scrollView的contentsize.width大於UIWebView的frame.size.width.

13.如何監測系統鍵盤的彈出

[objc] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. 通過註冊鍵盤顯示的消息  
  2. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShown:)  
  3. name:UIKeyboardWillShowNotification object:nil];  
  4.   
  5. - (void)keyboardWillShown:(NSNotification*)aNotification{  
  6.     // 鍵盤信息字典  
  7.     NSDictionary* info = [aNotification userInfo];  
  8. }  

14.改變狀態欄顏色

[objc] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. 在Info.plist 添加  
  2. UIViewControllerBasedStatusBarAppearance, 設置值爲 NO  
  3. 然後再didFinishLaunchingWithOptions的AppDelegate, 添加這些代碼:  
  4.   
  5. [application setStatusBarHidden:NO];[application setStatusBarStyle:UIStatusBarStyleLightContent];  


15.路徑截取字符串的一些處理

[objc] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. // 從路徑中獲得完整的文件名(帶後綴)       
  2. exestr = [filePath lastPathComponent];   
  3.   
  4. // 獲得文件名(不帶後綴)   
  5. exestr = [exestr stringByDeletingPathExtension];       
  6.   
  7. // 獲得文件的擴展類型(不帶'.')   
  8. exestr = [filePath pathExtension];  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章