2009-01-22 74 views
6

我正在嘗試做一些我認爲很簡單的事情。你如何改變UIControl專注於iPhone?

我有一個窗體上有兩個UITextFields。第一個使用的是UIReturnKeyNext樣式。這個想法是,當用戶填寫第一個字段時,他們點擊下一步,我將它們轉換到下一個UITextField。我見過其他的應用程序這樣做,它的工作非常好。但我無法弄清楚如何把重點放在下一個領域。

回答

9

簡單。發送becomeFirstResponder消息到您的其他文本字段。當其他文本字段接受第一響應者狀態時,它將從鍵盤接收信息。

例如:

//called when the next button is pressed 
//Assume textField1, 2, and 3 are instances of UITextField 
-(IBAction) nextPressed: (id) sender { 
     if ([textField1 isFirstResponder]) { 
     [textField2 becomeFirstResponder]; 
     } 
     if ([textField2 isFirstResponder]) { 
     [textField3 becomeFirstResponder]; 
     } 

} 
+0

這是我的第一個想法很好,但我被這個文檔,其中明確規定becomeFirstResponder用於當他們即將成爲以通知UIResponder混淆急救人員。在Mac OSX上,NSResponder禁止直接調用becomeFirstResponder。但是,事實證明你是正確的。 – Andy 2009-01-22 18:26:16

+0

是否將nextPressed鏈接到每個文本字段(在上面的示例中,將其鏈接到textField1,2,3)? – HollerTrain 2010-01-03 00:25:21

0

答案上面,你想從原來的文本字段resignFirstResponder異常的偉大工程。

如果您不退出第一響應者,當下一個字段成爲第一響應者時,IOS自動滾動調整將不起作用。 (鍵盤可能會覆蓋下一個文本字段。)

-(IBAction) nextPressed: (id) sender { 

    //Resign first so that when the next field becomes firstResponder 
    //the text field will scroll into place if covered by the keyboard 
    [sender resignFirstResponder];  

    if ([textField1 isFirstResponder]) { 
     [textField2 becomeFirstResponder]; 
    } 
    if ([textField2 isFirstResponder]) { 
     [textField3 becomeFirstResponder]; 
    } 
}