我试图在创建的TextField中键入内容时,在调试器控制台中显示我的UITextField中的输入,但是Delegate方法似乎没有响应。我希望能在下面的UIdelegate方法中看到我的打印语句,例如当我第一次开始键入内容时,键入时以及按下“返回键”时。似乎没有激活所有委托方法,并且我不确定如何直接将Textfield链接到委托方法。另外,我还有另一个UITextField(未在此处显示),我是否必须使用“ addTarget”来区分两者?
let createUserName: UITextField = {
var myTextField = UITextField ()
myTextField.translatesAutoresizingMaskIntoConstraints = false
myTextField.placeholder = "Username" //set placeholder text
myTextField.font = UIFont.systemFont(ofSize: 14) // set font size of text field
myTextField.layer.borderWidth = 1.0 //set width
myTextField.layer.borderColor = UIColor.red.cgColor//set background color to a ui color
myTextField.layer.backgroundColor = UIColor.white.cgColor
myTextField.layer.cornerRadius = myTextField.frame.height/2
myTextField.autocorrectionType = .no // disable autocorrect when typing for .no, enable with .yes
myTextField.isSecureTextEntry = false// masked text
myTextField.keyboardType = .default //keyboard style is set to default
myTextField.returnKeyType = .default //retuen key text changed to "Done" instead of return
myTextField.clearButtonMode = .whileEditing
myTextField.delegate = self as? UITextFieldDelegate
return myTextField
}()
override func viewDidLoad() {
super.viewDidLoad()
createUserName.delegate = self
view.addSubview(createUserName)
setupUserName()
}
//UITextField Delegate methods
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
print("textfield should begin editting")
return true
}
func textFieldDidBeginEditing(_ textField: UITextField) {
print("text field edit")
}
//see string that is typed in debugger for use to validate password and crossreference username
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if let textFieldString = textField.text, let swtRange = Range(range, in: textFieldString) {
let fullString = textFieldString.replacingCharacters(in: swtRange, with: string)
print("FullString: \(fullString)")
}
return true
}
//dismiss keyboard when return button is pressed
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
print("text field return")
return true
}
您的viewController应该继承自UITextFieldDelegate
class YourViewController : UIViewController, UITextFieldDelegate {
// your code
}
也请在ViewDidLoad中,将createUsername.delegate = self移至最后一行。
该字符串:
myTextField.delegate = self as? UITextFieldDelegate
告诉我们您的VC不直接符合协议UITextFieldDelegate ...
如果您遵循,迅捷不会添加为?投...