Swift UI委托方法不起作用

Swift UI委托方法不起作用,swift,debugging,delegates,uitextfield,uitextfielddelegate,Swift,Debugging,Delegates,Uitextfield,Uitextfielddelegate,当我在创建的TextField中键入内容时,我试图让UITextField中的输入显示在调试器控制台中,但是委托方法似乎没有响应。我希望看到UIdelegate方法的打印语句,如我第一次开始键入时、键入时以及按下“回车键”时。所有委托方法似乎都没有被激活,我也不知道如何使我的Textfield直接链接到委托方法。此外,我还有另一个UITextField(此处未显示),我是否需要“addTarget”来区分这两个字段 class ViewController: UIViewController,

当我在创建的TextField中键入内容时,我试图让UITextField中的输入显示在调试器控制台中,但是委托方法似乎没有响应。我希望看到UIdelegate方法的打印语句,如我第一次开始键入时、键入时以及按下“回车键”时。所有委托方法似乎都没有被激活,我也不知道如何使我的Textfield直接链接到委托方法。此外,我还有另一个UITextField(此处未显示),我是否需要“addTarget”来区分这两个字段

class ViewController: UIViewController, UITextFieldDelegate {    

 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移动到最后一行

您的viewController应该从UITextFieldDelegate继承

class YourViewController : UIViewController, UITextFieldDelegate { 
 // your code
} 
同样在ViewDidLoad中,将createUsername.delegate=self移动到最后一行

那个字符串:

myTextField.delegate = self as? UITextFieldDelegate
告诉我们你的VC不直接符合协议UITextFieldDelegate

如果您符合swift不添加为?铸造…

该字符串:

myTextField.delegate = self as? UITextFieldDelegate
告诉我们你的VC不直接符合协议UITextFieldDelegate


如果您符合swift不添加为?cast…

您是说将myTextField.delegate=self作为?UITextFieldDelegate out?我意识到我的一个}闭包在我的类中不包含委托方法,所以现在它可以工作了,恭喜@你是说把myTextField.delegate=self当作?UITextFieldDelegate out?我意识到我的一个}闭包在我的类中不包含委托方法,所以现在它可以工作了,恭喜@bain@keshurrai我在上面的问题陈述中加入了班级行,这样你就可以看到一切。将createUsername.delegate=self放入ViewDidLoad的最后一行不起作用。还有其他建议吗?@keshurai我意识到我的}闭包中有一个不包含类中的委托方法,所以现在works@keshurrai我在上面的问题陈述中加入了班级行,这样你就可以看到一切。将createUsername.delegate=self放入ViewDidLoad的最后一行不起作用。还有其他建议吗?@keshurai我意识到我的}闭包中有一个不包含类中的委托方法,所以现在它可以工作了