2010-07-13 56 views
9

從Mac OS X有沒有iPhone等效的NSResponder方法-selectNextKeyView-nextValidKeyView?我知道-becomeFirstResponder方法,但查看層次結構變得更加複雜時,找出哪個視圖調用該方法並不是很漂亮。專注於iPhone上的下一個有效的按鍵視圖

必須有某種方式來找到這一點,因爲當我在iPhone模擬器中按下標籤時,焦點確實轉到下一個UITextField。這讓我想知道當我按下標籤時究竟發生了什麼。有任何想法嗎?

更新:這正是我想要的,但_nextKeyResponder是私人API,所以是一個禁忌。有沒有什麼辦法可以在不使用私有API的情況下進行「假」選項卡按鍵?

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    // Try to find next responder 
    UIView *nextResponder = (UIView *)[self.view _nextKeyResponder]; 

    if (nextResponder) { 
     // Found next responder, so set it. 
     [nextResponder becomeFirstResponder]; 
     [self.tableView scrollRectToVisible:[self.tableView convertRect:[nextResponder frame] fromView:nextResponder] animated:YES]; 
    } else { 
     // Not found, so remove keyboard. 
     [textField resignFirstResponder]; 
    } 
    return NO; // We do not want UITextField to insert line-breaks. 
} 

回答

11

對於NSResponder-selectKeyView-nextValidKeyView,沒有公共iOS等效項。

當第一響應者是UITextField一個實例,壓片實例被傳遞到-[UIApplication sendEvent:]UIEvent私有子類,後者又調用-[UIView _nextKeyResponder]

-[UIView _nextKeyResponder]不像你認爲的那樣工作。它將關鍵視圖鏈視爲一個循環,因此您的else塊將永遠不會到達。出於同樣的原因,即使有合成鍵盤事件的公共API,您可能也不想使用它。

相反,您可能需要更類似UIWebViewUIToolbar的表單輸入附件。它的按鈕可以在適當情況下啓用和禁用,其代表處理實際的按鈕操作。

然而,要以一般方式實施這樣的委託,查看how -[UIView _nextKeyResponder] is implemented可能會有幫助。

+0

好的答案!我很欣賞你進入的細節。 – 2011-06-06 16:16:54

0

UITextField委託-textFieldDidEndEditing:,(例如,通過測試文本字段的tag屬性)的各種文本字段之間進行切換。

當您匹配一個文本字段時,請將另一個文本字段或其他控件設置爲下一個響應者。

+1

正如我在我的問題寫了,我知道的方法。我只是想知道如果我能夠在處理選項卡時利用iOS中已有的內容。 – 2010-07-13 22:35:33

相關問題