Cocoa touch 如何更改iPhone上的UIControl焦点?

Cocoa touch 如何更改iPhone上的UIControl焦点?,cocoa-touch,Cocoa Touch,我正在尝试做一些我认为很简单的事情 我有一个表单,上面有两个UITextField。我在第一个上使用下一个样式。其思想是,当用户填写第一个字段时,他们单击Next,我将其转换到下一个UITextField。我见过其他的应用程序可以做到这一点,而且效果非常好。但我不知道如何将焦点设置到下一个字段。简单。向其他文本字段发送becomeFirstResponder消息。当另一个文本字段接受第一响应者状态时,它将从键盘接收信息 -(IBAction) nextPressed: (id) sender {

我正在尝试做一些我认为很简单的事情


我有一个表单,上面有两个UITextField。我在第一个上使用下一个样式。其思想是,当用户填写第一个字段时,他们单击Next,我将其转换到下一个UITextField。我见过其他的应用程序可以做到这一点,而且效果非常好。但我不知道如何将焦点设置到下一个字段。

简单。向其他文本字段发送becomeFirstResponder消息。当另一个文本字段接受第一响应者状态时,它将从键盘接收信息

-(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];
    }
}
例如:

//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];
      }

}

上面的答案非常有效,但您可能希望从原始文本字段中退出FirstResponder

如果您不退出第一响应者,当下一个字段成为第一响应者时,IOS自动滚动调整将不起作用。(键盘可能会覆盖下一个文本字段。)


这也是我的第一个想法,但我被文档弄糊涂了,文档中清楚地说明becomeFirstResponder用于在UIResponder即将成为第一响应者时通知UIResponder。在Mac OSX上,nsrresponder禁止直接呼叫becomeFirstResponder。但是,事实证明你是正确的。你是否将nextPressed链接到每个文本字段(在上面的示例中,它将链接到textField1、2、3)??是的,如果你使用interface builder,你可以将所有文本字段的“内部润色”操作链接到相同的nextPressed方法,同时将每个文本字段连接到自己的IBOutlet(textField1、textField2等)使用“内部润色”对我不起作用。我试过了,也试过了“编辑结束了”…什么都没有:(我发现另一个问题的答案更复杂等一下…什么是iOS自动滚动调整?!?我一直看到你必须自己处理这种滚动。我这里有一个简单的应用程序,上面有几个UITextField,当键盘覆盖它们时,它们肯定不会滚动到视图中。我缺少什么?Th是内置在IOS中的。非常确定您的文本字段必须位于UIScrollView内部的视图中。啊,好吧,也许这是UIScrollView的一种行为……这会有一定的意义。但在其他情况下没有特别的帮助。