Swift UI委托方法不起作用

问题描述 投票:0回答:2

我试图在创建的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
}
swift debugging delegates uitextfield uitextfielddelegate
2个回答
0
投票

您的viewController应该继承自UITextFieldDelegate

class YourViewController : UIViewController, UITextFieldDelegate { 
 // your code
} 

也请在ViewDidLoad中,将createUsername.delegate = self移至最后一行。


0
投票

该字符串:

myTextField.delegate = self as? UITextFieldDelegate

告诉我们您的VC不直接符合协议UITextFieldDelegate ...

如果您遵循,迅捷不会添加为?投...

© www.soinside.com 2019 - 2024. All rights reserved.