点击“下一步”时移动到下一个UITextField

时间:2012-02-10 10:26:33

标签: objective-c xcode ipad ios4 uitextfield

我有一个iPad应用程序,里面有一个注册表单。表单是非常基本的,只包含两个UITextFields,用于Name&电子邮件地址。

第一个TextField用于候选人名称,当他们输入他们的名字并按下键盘上的“下一步”时,我希望它自动移动到下一个电子邮件地址TextField进行编辑。

知道如何设置键盘的下一个按钮以跳转到下一个键盘吗?

由于

7 个答案:

答案 0 :(得分:73)

您需要将视图控制器设置为UITextField委托,并实现UITextField委托方法:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if (textField == nameField) {
        [textField resignFirstResponder];
        [emailField becomeFirstResponder];
    } else if (textField == emailField) {
        // here you can define what happens
        // when user presses return on the email field
    }
    return YES;
}

Swift版本:

func textFieldShouldReturn(textField: UITextField) -> Bool {
    if textField == nameField {
        textField.resignFirstResponder()
        emailField.becomeFirstResponder()
    } else if textField == emailField {
        // here you can define what happens
        // when user presses return on the email field
    }
    return true
}

您可能还想滚动视图以使emailField可见。如果您的视图控制器是UITableViewController的一个实例,这应该会自动发生。如果没有,您应该阅读this Apple document,尤其是移动位于键盘下的内容部分。

答案 1 :(得分:10)

除了@lawicko的回答之外,我经常更改按钮文字以提供最后的结束触摸(例如,当有更多字段时显示next,然后在最后一个时显示done):

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    BOOL isLastTextField = //.. your logic to figure out if the current text field is the last

    if (isLastTextField) {
        textField.returnKeyType = UIReturnKeyDone;
    } else {
        textField.returnKeyType = UIReturnKeyNext;
    }
}

答案 2 :(得分:10)

正确答案的Swift版本。

根据我的经验,切换textFields时不需要resignFirstResponder。

在此示例中,它只是您的基本用户名和密码textFields。

用户名的故事板中的键盘“返回键”设置为“下一步”,密码设置为“完成”。

enter image description here

然后只需连接这两个文本字段的代理人并添加此扩展程序即可完成。

extension LoginViewController: UITextFieldDelegate {

    func textFieldShouldReturn(textField: UITextField) -> Bool {
        if textField == textFieldPassword {
            self.view.endEditing(true)
        } else {
            textFieldPassword.becomeFirstResponder()
        }
        return true
    }

}

答案 3 :(得分:5)

更加一致和强大的方法是使用NextResponderTextField 您可以完全从界面构建器配置它。

您需要做的就是

  1. UITextField的班级类型设为NextResponderTextField enter image description here
  2. 然后将nextResponderField的出口设置为指向下一个响应者,它可以是任何UITextField或任何UIResponder子类。它也可以是一个UIButton,并且该库足够聪明,只有在启用时才能触发按钮的TouchUpInside事件。 enter image description here enter image description here
  3. 这是正在运行的库:

    enter image description here

答案 4 :(得分:2)

Swift 4 扩展程序。只需传递setUSDValue() { const { AmountCharged, Currency, FYSigned} = this.state; if(AmountCharged && Currency && FYSigned) { fetch(`http://ca-fpscfb2:2000/USDValueExchangeRateValue?rateYear=${FYSigned}&USD=${Currency}&CAD=${Currency}&INR=${Currency}&GBP=${Currency}`) .then(response => response.json().then(response => this.setState( { exchangeRateVal: response.data }, () => this.state.exchangeRateVal.map((rate) => ( this.setState({ USDValue: rate.USD }) )) ))) } 数组,它将把每个数组连接到下一个数组,直到最后一个退出第一个响应者(隐藏键盘):

UITextFields

答案 5 :(得分:0)

- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
    if (textField == self.textFieldName)
    {
        [self.textFieldName resignFirstResponder];
        [self.textFieldPassword becomeFirstResponder];
    }
    else if (textField == self.textFieldPassword)
    {
        [self.textFieldPassword resignFirstResponder];

        [self login:self];
    }

    return true;
}




@interface MLLoginViewController ()<UITextFieldDelegate>

@end

@implementation MLLoginViewController



- (void)viewDidLoad {
    [super viewDidLoad];
    self.textFieldName.delegate = self;
    self.textFieldPassword.delegate = self;

答案 6 :(得分:0)

为文本字段创建一个插座,然后

<强> viewController.h

(IBAction)textFieldDoneEditing:(id)sender;

<强> viewController.m

(IBAction)textFieldDoneEditing:(id)sender {
    [textField resignFirstResponder];
    if (textField == nameField) {
        [emailField becomeFirstResponder];
    } 
} 

建立(显示连接检查器&gt;已发送事件)didEndOnExit和textFieldDoneEditing

之间的关系