实施';下一个';iPhone SDK键盘中的选项

实施';下一个';iPhone SDK键盘中的选项,iphone,Iphone,当用户选择键盘上的“下一步”按钮时,用户将被发送到下一个文本字段开始编辑,我在尝试执行这项任务时遇到了非常困难的情况。在我的示例中,我有三个文本字段。这是我所做的,希望你能告诉我哪里出了问题。请记住,我几周前刚拿起SDK,这可能是问题的一部分:) 在我的ViewControler.h文件中,我创建了以下方法 -(IBAction)nextPressed:(id) sender; 在我的ViewController.m文件中,我创建了以下操作 -(IBAction)nextPressed:(id

当用户选择键盘上的“下一步”按钮时,用户将被发送到下一个文本字段开始编辑,我在尝试执行这项任务时遇到了非常困难的情况。在我的示例中,我有三个文本字段。这是我所做的,希望你能告诉我哪里出了问题。请记住,我几周前刚拿起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:”选项)链接到我的文件所有者。我曾尝试只链接到第一个文本字段,但当链接不起作用时,所有三个文本字段都会链接。我还尝试了链接到一个文本字段的第一响应者,而不是文件的所有者,然后是所有的文本字段,但没有成功。此外,对于每个文本字段,我选择了返回键作为“下一步”

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

我这一步做错了什么?我使用了这篇文章()中的说明,但这里似乎遗漏了一些重要的东西


在此方面的任何帮助都将不胜感激。在过去的四个小时里,我一直在盯着这个问题,用谷歌搜索我能找到的每一个可能的搜索词,但我不能轻易地将我的头脑集中在实现这个目标所需的步骤上。同样,帮助也非常有用:)

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

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

我认为你错的地方是把它看作是一个你联系到一起的事件。相反,您需要在代码中的某个地方实现此委托,并告诉您的
UITextField
哪个类是它的委托。

我认为您不需要定义单独的选择器
nextPressed:
-相反,实现UITextFieldDelegate协议方法,使其看起来像:

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

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

上面的Tim很在行。这对我也有用!我用多个键盘实现了以下功能

在ViewController.m中:

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

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

您可以使用以下代码

分配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;

委托是在应用程序的后台发生的事情?委托是一个可以实现一些回调方法的对象,通常由协议定义。我认为这些方法通常是在主线程上调用的。gerry3:这些方法是从调用方在其中执行的任何线程调用的;对于UIKit对象,这通常是主线程,但作为一种模式的委托可以发生在任何线程上。在IB中,我从textfields链接到FileOwner或First Responder的实际内容是什么?只是右键单击第一个文本字段,拖动到文件所有者并选择OUTLETS下的“delegate”吗?选择每个文本字段,然后对于
delegate
outlet,将其拖动并链接到文件所有者。(还要确保文件所有者的类属性设置正确。)感谢Tim的帮助。我正在到达那里,但遇到了一个问题。第一个文本字段工作正常,当我单击“下一步”时,它允许我转到下一个字段。但是,一旦我尝试在第二个字段上单击next,我就会在这里发现错误()。这里还有一段视频()。这是链接到代理()的我的字段的快照。关于我在这里做错了什么的想法?请注意,方法
textfield应该返回:
本身需要返回一个
BOOL
——也就是说,
YES
NO
。尝试添加语句
返回NO到您的方法末尾(在所有
if
块之外),如我上面的回答所示。啊!我完全忽略了这一点。所以现在看来每个人都在工作。但是,当我尝试从第二个文本字段移动到第三个文本字段时,它会在我身上暂停,并返回到Xcode,但没有出现任何错误。但是,当我返回到Build/Run并从第三个文本字段开始时,它对其余字段非常有效。这是我的代码或IB中的错误吗?)太近了,我非常感谢你的帮助。是的,蒂姆是个天才。要是他能回答我关于以编程方式创建数字的逆运算的问题就好了。。。。。