gpt4 book ai didi

ios - 在 Return 键上启动 UIButton 的 IBAction

转载 作者:行者123 更新时间:2023-11-28 06:00:47 24 4
gpt4 key购买 nike

我有一个注册表单,其中包含许多 UITextfieldsUIButton。我已经设置了 UITextfield 委托(delegate),以便当用户开始编辑 UITextfield 并按下返回键时,它会转到下一个 UITextfield

SignUp Form

DoB、ISD Code、Gender 和 Nationality 是具有 IBActionsUIButtons,其余是 UITextfields

是否可以在按下文本字段中的 return 键时启动 UIButtonIBAction。以便用户可以按顺序将必要的数据添加到注册表单。

到目前为止我做了什么..

    func textFieldShouldReturn(_ textField: UITextField) -> Bool{

if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField
{
nextField.becomeFirstResponder()
}
else {
// Not found, so remove keyboard.
signupScrollView .setContentOffset(CGPoint( x: 0, y: 0), animated: true)
textField.resignFirstResponder()
return true
}
// Do not add a line break
return false
}

func textFieldDidBeginEditing(_ textField: UITextField) {
signupScrollView .setContentOffset(CGPoint( x: 0, y: textField.center.y-200), animated: true)

}

最佳答案

假设您的 textFieldbutton 具有相同的标签序列,您基本上可以执行如下操作:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {

let nextView = textField.superview?.viewWithTag(textField.tag + 1)

if let nextTextField = nextView as? UITextField {
//next view is a textField so make next textField first responder
nextTextField.becomeFirstResponder()
}
//just this extra case is required
else if let nextButton = nextView as? UIButton {
//next view is a button so call it's associated action
//(assuming your button's @IBAction is on the Touch Up Inside event)
nextButton.sendActions(for: .touchUpInside)

/*
a button's action will be performed so if you want to
perform the return action on the textField then either
return true/false. Decide that as per your requirement
*/
return true
}
else {
//...
}

//...
}

上述逻辑足以回答您的问题,但仅当用户在 textField 上并点击键盘的 Return 按钮时才有效。

现在……问题是在按钮操作结束时,如果你想继续到下一个 View ; textFieldbutton,您可以1显式编码以使下一个 View 处于事件状态。

例子:

  • ISD Code 完成后,您可以将手机 textField 作为第一响应者
  • Gender 完成后,您可以调用 Nationality 的按钮操作

或者2...

我们可以修改解决方案来处理 textField 以及 button,我们将调用 goNext(from:) 将在 textFieldShouldReturn(_:) 中以及在按钮完成其预期逻辑流之后实现。

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
let nextView = goNext(from: textField)

if let nextTextField = nextView as? UITextField {
//Next field was a textField so keyboard should stay
return false
}

textField.resignFirstResponder()
return true
}

@discardableResult func goNext(from sender: UIView) -> UIView? {
let nextView = sender.superview?.viewWithTag(sender.tag + 1)
print(nextView?.tag ?? "No view with tag \(sender.tag + 1)")

if let nextTextField = nextView as? UITextField {
nextTextField.becomeFirstResponder()
}
else if let nextButton = nextView as? UIButton {
nextButton.sendActions(for: .touchUpInside)
}
else {
print("Done")
signupScrollView.setContentOffset(CGPoint(x: 0, y: 0),
animated: true)
sender.resignFirstResponder()
}

return nextView
}

现在对于按钮部分,只要关联的按钮完成其逻辑,就需要执行 goNext(from: button)

例子:

  • 用户已成功选择出生日期:然后您应该打电话

    goNext(来自:dobButton)

关于ios - 在 Return 键上启动 UIButton 的 IBAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49828735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com