swift2 如何使用键盘“Go”提交UITextFields,就像Swift 2中的UIButton一样

cgvd09ve  于 2022-11-06  发布在  Swift
关注(0)|答案(3)|浏览(185)

好了,我有一个函数,允许我的用户使用键盘转到下一个字段(我从SO那里得到了代码)它工作得很好。我的问题是,一旦我的用户到达了最后一个文本字段,在这个字段中,我选择了“GO”作为返回按钮,而我想使用go作为理想的提交按钮。当通过表单的流程进行时,它看起来是正确的,但最后的功能并不存在。我在这里找到了答案,但它似乎调用了与“next field”代码相同的函数。因此,它们不能很好地协同工作。下面是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
    // ...
}

下一个块显示在override(我相信你知道)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的想法/代码的地方:
Action of the "Go" button of the ios keyboard
如何实现这些?或者只是为了处理下一个函数,并实现一个类似于@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))
        }
    }
}

我想这会有很大帮助

ca1c2owp

ca1c2owp1#

- (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键顺序和表单提交的更简洁的方法,请阅读我的答案here

rsaldnfx

rsaldnfx2#

首先将return键设置为TextField中的Go,然后实现以下方法:

func textFieldShouldReturn(textField: UITextField) -> Bool {
      if (textField.returnKeyType == UIReturnKeyType.Go)
         {
            // Implement your IBAction method here
        }
      return true
 }

请参见下图:

0kjbasz6

0kjbasz63#

适用于iOS 15SwiftUI。您可以使用**.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)
    }
}

相关问题