[英]How to use the keyboard "Go" to submit UITextFields like a UIButton in Swift 2
好的,所以我有一个功能,允许我的用户使用键盘转到下一个字段(我从 SO 那里得到了代码)它工作得很好。 我的问题是,一旦我的用户进入最后一个文本字段,我选择了“GO”作为返回按钮,并且我想使用 go 作为理想的提交按钮。 随着表单的流逝,它看起来是正确的,但最后的功能不存在。 我在这里找到了答案,但看起来它调用的函数与“下一个字段”代码相同。 所以它们不能很好地协同工作。 下面是 Next Field 代码的样子:
override func viewDidLoad() {
super.viewDidLoad()
// Keyboard Next Field & Delegate
enterEmailTextField.delegate = self
enterPasswordTextField.delegate = self
self.enterEmailTextField.nextField = self.enterPasswordTextField
self.enterPasswordTextField.nextField = self.enterNameTextField
// ...
}
下一个块显示在覆盖下面(我相信你知道) func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }
// Next Field
func textFieldShouldReturn(textField: UITextField) -> Bool {
if let nextField = textField.nextField {
nextField.becomeFirstResponder()
}
return true
}
好的,直到最后一个文本字段都可以正常工作,但是由于最后一个字段是“Go”,因此我试图模仿我对按钮说 @IBAction 的做法,而不是 go 按钮。 这是我获得 Go to work 的想法/代码的地方:
关于如何实现这些的任何想法? 或者也许只是为了使用下一个函数,并实现类似于@IBaction 的“keyboard go”动作? 也许只是一个更好的方法来实现这两者,使它们彼此一致? 任何帮助深表感谢!
编辑!
我忘记了实际的 NextField.swift 文件,我确信它很重要(抱歉)
import Foundation
import UIKit
private var kAssociationKeyNextField: UInt8 = 0
extension UITextField {
@IBOutlet var nextField: UITextField? {
get {
return objc_getAssociatedObject(self, &kAssociationKeyNextField) as? UITextField
}
set(newField) {
objc_setAssociatedObject(self, &kAssociationKeyNextField, newField, UInt(OBJC_ASSOCIATION_RETAIN))
}
}
}
我假设这会很有帮助
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if (textField.returnKeyType == UIReturnKeyNext) {
// tab forward logic here
return YES;
}
else if (textField.returnKeyType == UIReturnKeyGo) {
// submit action here
return YES;
}
return NO;
}
以更简洁的方式处理 Tab 键顺序和表单提交,请在此处阅读我的回答。
首先将返回键设置为 TextField 的 Go,然后实现以下方法:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if (textField.returnKeyType == UIReturnKeyType.Go)
{
// Implement your IBAction method here
}
return true
}
然后见下图:
适用于SwiftUI 中的iOS 15 。 您可以使用.submitLabel(.go)来做到这一点。
@available(iOS 15.0, *)
struct TextFieldSubmitView: View {
@Binding var name: String
var body: some View {
VStack(alignment: .leading) {
TextField("Type text", text: $name)
.textFieldStyle(.roundedBorder)
.padding()
#if os(iOS)
.submitLabel(.go)
#endif
}
}
}
@available(iOS 15.0, *)
struct TextFieldSubmitView_Previews: PreviewProvider {
static var previews: some View {
TextFieldSubmitView(name: .constant("Name"))
.previewLayout(.sizeThatFits)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.