你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iPhone開發學習筆記006—— NSNotification自定義通知名

iPhone開發學習筆記006—— NSNotification自定義通知名

編輯:IOS開發綜合

最近在網上看到一個“在iPhone開發中給鍵盤加個隱藏工具條”的demo,下下來後,運行後發現,點擊“隱藏鍵盤”之後,之前的TableView不能恢復為應用剛啟動時的顯示,因為當TextField獲得焦點時,會彈出軟鍵盤,相應的需要通過程序調整界面上的TableView,修改其Frame將之上移。(注:TableView中放了五個TextField)。但是點擊“隱藏鍵盤”後,TableView還是維持在其Frame修改之後的樣子,沒有恢復為應用剛啟動時的樣子。

嘗試過在

- (void)textFieldDidEndEditing:(UITextField *)textField;方法中添加修改TableView的Frame使之恢復啟動時顯示樣子的語句,但是發現只要TextField的焦點發生變化,就會調用這個API,比如從第一個TextField跳到第二個TextField,焦點從第一個切換到第二個,再從第二個切換到第三個,第四個。。。只要任意一個TextField發生失去焦點事件,就會調用這個API。結果造成每發生一次焦點切換,界面就會先恢復應用啟動時顯示的樣子,然後很快又變成Frame被修改之後的樣子。

也嘗試過注冊軟鍵盤顯示和隱蔵的通知
發現也是一樣,焦點從一個TextField切換到另一個TextField,就會先後發送一次UIKeyboardWillHideNotification和UIKeyboardWillShowNotification通知,還是不能實現想要的效果,即只是在點擊了“隱藏鍵盤”之後,才恢復主界面上TableView顯示。

後來想到了自定義通知,才解決這個問題:
Demo裡面有個HiddenKeyBoard函數,這個是點擊“隱藏鍵盤”按鈕之後會調用的selector,那就在這個裡面添加發送通知語句:


[[NSNotificationCenterdefaultCenter]postNotificationName:@"mytest"object:nil];


然後在ViewController的viewWillAppear裡面注冊這個通知:

- (void)viewWillAppear:(BOOL)animated { 

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(doAfterKeyboardbarHidden:)name:@"mytest"object:nil]; 

 


    [super viewWillAppear:animated]; 

}

 


- (void)viewWillDisappear:(BOOL)animated {   

    //[[NSNotificationCenter defaultCenter] removeObserver:self]; 

    [[NSNotificationCenterdefaultCenter] removeObserver:selfname:@"mytest"object:nil];

    [super viewWillDisappear:animated]; 

}

 


- (void)doAfterKeyboardbarHidden:(NSNotification*)notification {

    //id obj = [notification object];//獲取到傳遞的對象

    NSLog(@"++++++ //// +++++");

    tableview.frame = CGRectMake(0,40, 320, 340);

}

OK!想要的效果實現了!
貼兩張圖:第一張是輸入,輸入完就點“隱藏鍵盤”,馬上界面就恢復正常顯示了,即第二張圖:\\


摘自 Code Heaven
 


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved