我正在努力实现当用户选择键盘中的“下一个”按钮时的任务非常困难,然后将用户发送到下一个文本字段以开始编辑。在我的例子中,我有三个文本字段。这就是我所做的,希望你能填补我的错误。请记住,我几周前刚拿起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?),但似乎在这里遗漏了一些东西。
对此的任何帮助都将非常赞赏。在过去的四个小时里,我一直在盯着这个,并且谷歌搜索我能想到的每一个可能的搜索词,并且不能轻易地围绕完成这个所需的步骤。再次,帮助将是非常有帮助的:)
答案 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)
:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if(textField == txtCoffeeName) {
[txtCompanyName becomeFirstResponder];
} else if(textField == txtCompanyName) {
[txtPrice becomeFirstResponder];
}
return NO;
}