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

來源:互聯網
上載者:User

最近在網上看到一個“在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
 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.