在iPhone SDK的键盘中实现“下一步”选项

时间:2010-01-03 01:04:36

标签: iphone

我正在努力实现当用户选择键盘中的“下一个”按钮时的任务非常困难,然后将用户发送到下一个文本字段以开始编辑。在我的例子中,我有三个文本字段。这就是我所做的,希望你能填补我的错误。请记住,我几周前刚拿起SDK,这可能是问题的一部分:)

在我的ViewControler.h文件中,我创建了以下方法

-(IBAction)nextPressed:(id) sender;

在我的ViewController.m文件中,我创建了以下操作

-(IBAction)nextPressed:(id) sender 
{
    if ([txtUserName isFirstResponder]) 
    {
        [txtUserName2 becomeFirstResponder];
    }
    if ([txtUserName2 isFirstResponder]) 
    {
        [txtUserName3 becomeFirstResponder];
    }
}

在我的.xib文件中,我已将第一个文本字段(右键单击文本字段并拖动到文件所有者并选择“事件”下的“nextPressed:”选项)链接到我的文件所有者。我已经尝试链接到第一个文本字段,并且当它不能用于所有三个文本字段时。我还尝试将一个文本字段链接到文件所有者但不是第一响应者,然后是所有文本字段,没有运气。此外,对于每个文本字段,我选择了返回键为“NEXT”。

现在,当我构建/运行时,我可以编辑文本字段并查看右下角的“下一步”按钮,但它不会将我移动到下一个字段。

我在这里做错了什么?我使用了这篇文章中的说明(How do you change the UIControl with focus on iPhone?),但似乎在这里遗漏了一些东西。

对此的任何帮助都将非常赞赏。在过去的四个小时里,我一直在盯着这个,并且谷歌搜索我能想到的每一个可能的搜索词,并且不能轻易地围绕完成这个所需的步骤。再次,帮助将是非常有帮助的:)

4 个答案:

答案 0 :(得分:22)

我认为您不需要定义单独的选择器nextPressed: - 而是实现UITextFieldDelegate协议方法textFieldShouldReturn:,如下所示:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if(textField == txtUserName) {
        [txtUserName2 becomeFirstResponder];
    } else if(textField == txtUserName2) {
        [txtUserName3 becomeFirstResponder];
    }
    return NO;
}

当按下Enter键(在您的情况下,是Next键)时,该特定方法会监视。一旦实现了,只需将三个文本字段中的每一个的委托设置为实现类(可能是您的视图控制器),您就应该很好。

答案 1 :(得分:2)

您可以使用以下代码......

指定returnKeyType属性

@property(nonatomic) UIReturnKeyType returnKeyType;  

UITextField *myTextField; // your textfield..
myTextField.returnKeyType = UIReturnKeyNext;

您可以将以下类型分配给虚拟键盘的返回键

typedef enum {
UIReturnKeyDefault,
UIReturnKeyGo,
UIReturnKeyGoogle,
UIReturnKeyJoin,
UIReturnKeyNext,
UIReturnKeyRoute,
UIReturnKeySearch,
UIReturnKeySend,
UIReturnKeyYahoo,
UIReturnKeyDone,
UIReturnKeyEmergencyCall,
} UIReturnKeyType;

答案 2 :(得分:1)

您应该将每个文本字段delegate设置为视图控制器。然后,在视图控制器中,实现UITextFieldDelegate。最后,只需将以下函数添加到视图控制器.m文件中:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if (textField == txtUsername)
        [txtUsername2 becomeFirstResponder];
    else if (textField == txtUsername2)
        [txtUsername3 becomeFirstResponder];
}

我认为你出错的地方是将它视为你连接的事件。相反,您需要在代码中的某个位置实现此委托,并告诉您UITextField哪个类是它的委托。

答案 3 :(得分:0)

蒂姆上面是球。这对我也有用!我用多个键盘实现了以下功能。

ViewController.m中的

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if(textField == txtCoffeeName) {
        [txtCompanyName becomeFirstResponder];

    } else if(textField == txtCompanyName) {
        [txtPrice becomeFirstResponder];
    }
    return NO;
}