Nai*_*hta 5 delegates uitextfield ios swift swift2
我textFields在屏幕上有两个和一个Submit button.用户在第一个textField输入详细信息,然后输入第二个.
我的要求是在Submit button单击时结束编辑并在这些中打印用户输入textFields.我在打印第二个textField的值时遇到问题,因为当用户单击时,编辑似乎永远不会结束Submit button.
这是我的代码.感谢您对此问题的帮助(我添加了textfield委托)
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
dfr*_*fri 14
在您的ViewController班级中,对于每个文本字段,通过按住Ctrl键将每个文本字段从故事板拖到您的代码中来创建一个@IBOutlet属性
@IBOutlet weak var textFieldFirst: UITextField!
@IBOutlet weak var textFieldSecond: UITextField!
Run Code Online (Sandbox Code Playgroud)
还要创建一个私有UITextField属性来保存(可能)当前(/最近使用的)文本字段.
private var currentTextField: UITextField?
Run Code Online (Sandbox Code Playgroud)
重写子类的viewDidLoad方法UIViewController以初始化两个"公共"文本字段实例的委托
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
}
Run Code Online (Sandbox Code Playgroud)
此外,使用两者textFieldShouldReturn(...)和textFieldDidBeginEditing(...)方法UITextFieldDelegate将(活动)文本字段状态作为第一响应者重新分配并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
}
Run Code Online (Sandbox Code Playgroud)
最后,将任何可能的当前文本字段作为第一响应者重新签名,以防submit在编辑中间按下
@IBAction func Submit(sender: UIButton) {
if let currentTextField = currentTextField {
currentTextField.resignFirstResponder()
}
print(firstName)
print(lastName)
}
Run Code Online (Sandbox Code Playgroud)
这样,您的视图控制器应该按预期工作.
总结一下:在上面的添加和修改之后,你的ViewController课应该是这样的
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
// Properties
@IBOutlet weak var textFieldFirst: UITextField!
@IBOutlet weak var textFieldSecond: UITextField!
private var currentTextField: UITextField?
var firstName = ""
var lastName = ""
@IBOutlet var buttonUI: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
// Actions
@IBAction func Submit(sender: UIButton) {
if let currentTextField = currentTextField {
currentTextField.resignFirstResponder()
}
print(firstName)
print(lastName)
}
// viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
// handle the user input in the text fields through delegate callbacks
textFieldFirst.delegate = self
textFieldSecond.delegate = self
// tags
textFieldFirst.tag = 1
textFieldSecond.tag = 2
}
// UITextFieldDelegate
func textFieldShouldReturn(textField: UITextField) -> Bool {
// User finished typing (hit return): hide the keyboard.
textField.resignFirstResponder()
return true
}
func textFieldDidBeginEditing(textField: UITextField) {
currentTextField = textField
}
func textFieldDidEndEditing(textField: UITextField) {
switch textField.tag {
case 1:
firstName = textField.text!
print(firstName)
case 2:
lastName = textField.text!
print(lastName)
default: break
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14234 次 |
| 最近记录: |