屏幕上有两个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
}
}
}
答案 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