【问题标题】:Swift UITextFieldShouldReturn Return Key TapSwift UITextFieldShouldReturn 返回键点击
【发布时间】:2014-07-31 19:16:01
【问题描述】:

(iOS8、Xcode6、斯威夫特) 使用 Swift,我如何捕获对“返回”按钮的点击?

以下链接中的文档指定使用textFieldShouldReturn 方法:

// Swift
@optional func textFieldShouldReturn(_ textField: UITextField!) -> Bool

我挂断电话的是“_ textField”部分。我使用 Storyboard 创建了文本字段。如何捕获此特定文本字段的通知?我是否需要创建一个新类并将其设置为此文本字段的委托?我是否为文本文件命名,然后以某种方式挂钩?

https://developer.apple.com/documentation/uikit/uitextfielddelegate/1619603-textfieldshouldreturn

【问题讨论】:

    标签: ios swift xcode cocoa-touch uitextfield


    【解决方案1】:

    您需要将一个对象设置为文本字段的委托。通常这将是文本字段所在的视图控制器。您不需要从任何其他类继承,或者严格来说,实现委托(但您可以实现 UITextFieldDelegate 以使事情更清晰一些。)

    【讨论】:

    • 我将包含视图控制器设置为文本字段的委托。然后我在 ViewController.swift 中输入了以下函数,但是当点击“Go”时事件没有触发。在这个函数中“asdf”应该输入什么: func textFieldShouldReturn(asdf: UITextField!) -> Bool { NSLog("Yes") return true }
    • 这行得通,但我不明白 iOS 如何知道为相关文本字段运行此功能。如果页面上有多个文本字段,并且都将 ViewController.swift 设置为它们的委托,该怎么办? func textFieldShouldReturn(textField: UITextField!) -> Bool { NSLog("Yes") return true }
    • 嘿@kmiklas - 你知道它是“哪个”,从到达的论点。如果有必要,您只需将其与您的 IBOutlets 进行比较
    【解决方案2】:
    class ViewController: UIViewController,UITextFieldDelegate //set delegate to class
    
    @IBOutlet var txtValue: UITextField //create a textfile variable
    
    override func viewDidLoad() {
       super.viewDidLoad() 
       txtValue.delegate = self //set delegate to textfile 
    }
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {   //delegate method
       textField.resignFirstResponder()
       return true
    }
    

    【讨论】:

    • 请不要对多个问题发布相同格式错误的答案。如果它们可以用相同的东西回答,它们就是重复的,应该这样标记/关闭。
    • 这假设 UITextField 是在 Storyboard 中创建的。至少在我的情况下,我正在以编程方式创建我所有的 UITextFields。
    • 如果您以编程方式或通过 storybord 或 XIB 创建 UITextFields,这并没有什么不同。在这里,您只需将委托设置为文本字段,而不是与所有人一起使用
    • 如果您不希望键盘在返回键上隐藏。不需要textField.resignFirstResponder()
    【解决方案3】:

    实现这个功能

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {   //delegate method
       textField.resignFirstResponder()
       return true
    }
    

    对于委托,您可以使用实用程序窗格/连接检查器/委托进行设置,然后拖动到 ViewController(情节提要中的黄色按钮)

    那么您不需要以编程方式为每个文本字段设置委托

    【讨论】:

      【解决方案4】:

      在 Swift 4.2 和 Xcode 10.1 中

      //UITextField delegate method
      func textFieldShouldReturn(_ textField: UITextField) -> Bool {
      
          if textField == TF1 {
              textField.resignFirstResponder()//
              TF2.becomeFirstResponder()//TF2 will respond immediately after TF1 resign.
          } else if textField == TF2  {
              textField.resignFirstResponder()
              TF3.becomeFirstResponder()//TF3 will respond first
          } else if textField == TF3 {
              textField.resignFirstResponder()
          }
          return true
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-03
        • 2020-04-30
        相关资源
        最近更新 更多