2013-01-17 23 views
1

當在UITableView中選擇一行並且在導航控制器內觸發推送區時,我想從當前編輯的文本字段中退出第一響應者。這是在一個popover內發生的。當使用UINavigationController時,退出didSelectRowAtIndexPath中的第一響應者

我已經試過兩件事情:

(1)我可以看到文本框的辭職第一響應者,而動畫,但後來當我回到視圖控制器再次進行第一個響應者顯示鍵盤。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.view endEditing:YES]; 
} 

(2)這將防止回到視圖控制器當編輯的恢復,但這種方法打破了動畫。在動畫結束時,第一個視圖控制器會變黑,並且會跳一點點。

編輯:剛剛意識到,因爲它有事情做與鍵盤動畫比推動畫更快,而且只要鍵盤消失得黑色和酥料餅的開始,這僅僅是在橫向模式下可見當鍵盤爲它留出空間時,將動畫設置爲更高的高度。在動畫導航控制器中的動畫時,動畫無法處理展開彈出窗口。當刪除下面的代碼並推送並讓iOS移除鍵盤時,鍵盤和推動畫將完全同時進行並避免此問題。我想知道如何在迫使辭職的時候讓自己發生。

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.view endEditing:YES]; 

    return indexPath; 
} 

如何改變視圖控制器時,沒有它航行回來時,再恢復對文本字段中的第一個響應者,我可以辭職急救員?

+0

您可以使用shouldBecomeFirstResponder委託方法來控制成爲第一響應者的東西。還打電話resignFirstResponder(不確定呼叫的確切措辭)工作? – Bergasms

+0

感謝您的回覆。從另一個視圖控制器返回時,我不知道如何識別情況,所以shouldBecomeFirstResponder可能會很棘手? resignFirstResponder的結果與endEditing完全相同。我在視圖控制器上有兩個文本框,這就是爲什麼我使用endEditing來覆蓋這兩個文本框。 – thejaz

+0

我認爲問題可能是,儘管視圖正在結束編輯,但實際的文本框仍然被註冊爲第一響應者。我建議參考第一響應者。 EG UItextField * firstResponder ;,並將其與參數設置爲textField:DidBecomeActive調用。所以你總是對當前的第一響應者有一個參考。然後,在viewWillDisappear中,調用[firstRespodner resignFirstResponder] ;.這應該確保沒有第一響應者離開。希望可以幫助。 – Bergasms

回答

0

等一會兒。所以問題是,當你執行segue(並關閉視圖)時,視圖恢復它有一種陰影的鍵盤顯示。是嗎?在這種情況下。你可以嘗試以下。當你點擊tableviewcell。做一個檢查。如下所示。

if(firstResponder != nil){ 
    //register for keyboard hide notification 
    [[NSSnotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:@"UIKeyboardDidHideNotification" object:nil];. 
    [firstResponder resignFirstResponder]; 
} else { 
    [self performSegue:@"yoursegueidentifier" withSender:nil]; 
} 

如果沒有應答這隻會推出賽格瑞(因此,沒有鍵盤)。如果有鍵盤,它會註冊鍵盤隱藏通知,然後辭去響應者。然後,在響應鍵盤隱藏的方法中,這應該只在鍵盤隱藏時才執行,因此它應該解決動畫問題。您可能需要修改故事板才能從視圖控制器啓動segue,而不是從單元格的按鈕啓動,我不確定您的架構如何。讓我知道這是否有效。

相關問題