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