2009-10-19 65 views
3

我有一個UITableView與兩個自定義單元格,他們每個人都有一個UITextField裏面的子視圖。我曾嘗試在UITableView之上添加一個UIButton,並使其具有resignFirstResponder,但這意味着您將無法在其他任何地方點按 - 即使在UITextFields上也無法輸入文本。當點擊UITableView時resignFirstResponder?

我該如何做到這一點,如果我點擊這兩個UITextFields之外,我可以調用resignFirstResponder,這樣用戶可以返回到其他單元格?

感謝

回答

1

我問了我發佈的類似questionfound an answer myself。基本上,您可以重寫hitTest:withEvent:在您的自定義UITableViewCell中,它可以讓您檢測觸摸是在您的單元格還是在表視圖中的任何其他單元格中發生的。我提供了一個可以複製原始hitTest功能的示例hitTest:方法:您可以將所需的內容添加到它中。您可以像我那樣在hitTest函數內添加您的resignFirstResponder,或者進一步對其進行自定義。

-2

而不是試圖挖掘領域以外辭職第一響應者,只需調整您的tableview與-setFrame當鍵盤顯示器,使其在鍵盤上方的可視區域。然後,您可以將視圖滾動到其他單元格。您可以通知該鍵盤是像這樣的事件註冊可見:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWillShow:) 
              name:UIKeyboardWillShowNotification 
              object:nil]; 

然後實現keyboardWillShow:

- (void)keyboardWillShow:(NSNotification*)notification; 
{ 
    [tableView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 200.0f)]; 
} 

問候。

+0

我真的寧願能夠resignFirstResponder,因爲鍵盤位於TabBar的頂部,用戶應該能夠回到,如果他們想要的話。 – runmad 2009-10-20 16:55:21

2

一個很好的簡單方法就是創建一個UITableView子類並實現觸摸方法(不要忘記將它們傳遞給超級!)。從那裏你可以檢查觸摸開始,並決定它是否是在UITextField中的觸摸(使用UIView中的hitTest:方法)。如果hitTest沒有返回一個UITextField,你可以在你的控制器中調用一個方法來退出第一個響應者。希望這能指出你正確的方向!