单击Button时UITextField不会结束编辑(委托textFieldDidEndEditing)

时间:2015-12-16 22:03:18

标签: ios swift delegates uitextfield swift2

屏幕上有两个textFields和一个Submit button。用户在第一个textField输入详细信息,然后输入第二个。

我的要求是在点击Submit button时结束编辑并在这些textFields中打印用户输入。我在打印第二个textField的值时遇到问题,因为编辑似乎永远不会结束用户点击Submit button

这是我的代码。感谢您对此问题的帮助(我添加了文本域代理)

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    var firstName = ""
    var lastName = ""

    @IBOutlet var buttonUI: UIButton!
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func Submit(sender: UIButton) {

        print(firstName)
        print(lastName)

    }

    func textFieldDidEndEditing(textField: UITextField) {

        switch textField.tag {

        case 1:
              firstName = textField.text!
            print(firstName)
        case 2:

            lastName = textField.text!
            print(lastName)

        default: break
        }

    }


}

2 个答案:

答案 0 :(得分:13)

ViewController课程中,对于每个文本字段,通过按住Ctrl键将每个文本字段从故事板拖到代码中来创建@IBOutlet属性

@IBOutlet weak var textFieldFirst: UITextField!
@IBOutlet weak var textFieldSecond: UITextField!

还创建一个私有UITextField属性来保存(可能)当前(/最近使用的)文本字段。

private var currentTextField: UITextField?

重写viewDidLoad子类的UIViewController方法,以初始化两个" public"的代理人。文本字段实例

override func viewDidLoad() {
    super.viewDidLoad()

    // Handle the user input in the text fields through delegate callbacks (and set tags)
    textFieldFirst.delegate = self
    textFieldFirst.tag = 1
    textFieldSecond.delegate = self
    textFieldSecond.tag = 2
}

此外,使用textFieldShouldReturn(...)的两个textFieldDidBeginEditing(...)UITextFieldDelegate方法将(活动)文本字段状态作为第一响应者重新签名并更新{{1}分别是引用。

currentTextField

最后,将任何可能的当前文本字段作为第一响应者重新签名,以防在编辑中间按// UITextFieldDelegate func textFieldShouldReturn(textField: UITextField) -> Bool { // User finished typing (hit return): hide the keyboard. textField.resignFirstResponder() return true } func textFieldDidBeginEditing(textField: UITextField) { currentTextField = textField }

submit

这样,您的视图控制器应该按预期工作。

总结一下:在上面的添加和修改之后,您的@IBAction func Submit(sender: UIButton) { if let currentTextField = currentTextField { currentTextField.resignFirstResponder() } print(firstName) print(lastName) } 类应该看起来像

ViewController

答案 1 :(得分:1)

你是什么意思

  

我在打印第二个文本字段的用户输入时遇到问题   当用户点击提交时,编辑永远不会结束。

为什么不在用户按提交时读取文本字段中的值?确保您的网点和代表是正确的。

对按钮Touch up inside执行操作,然后在该按钮中读取值:

firstName = textFieldOne.text
lastName = textFieldTwo.text