gpt4 book ai didi

ios - Swift:为什么我的 UITextFieldDelegate 方法没有被调用?

转载 作者:搜寻专家 更新时间:2023-11-01 06:16:22 24 4
gpt4 key购买 nike

我正在尝试以编程方式创建一个 UITextView 并创建一个委托(delegate)来处理事件。我能够创建添加和 UITextView 就好了,但是没有添加任何 UITextFieldDelegate 方法。为什么会这样?

    let myTextField = UITextField()
myTextField.frame = CGRect(x:0, y: 100, width: 300, height: 30)
myTextField.text = "Example Text"

class MyTextFieldDelegate : NSObject, UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
// Hide the keyboard.
print("should return!\n")
textField.resignFirstResponder()
return true
}

func textFieldDidEndEditing(_ textField: UITextField) {
print("yay!\n")
print(textField.text! + "\n")
}

func textFieldDidBeginEditing(_ textField: UITextField) {
print("yay begin!\n")
print(textField.text! + "\n")
}

}

let myTextFieldDelegate = MyTextFieldDelegate()
myTextField.delegate = myTextFieldDelegate
scrollView.addSubview(myTextField)

最佳答案

UITextField 中,delegate 被声明为 weak 属性。

weak var delegate: UITextFieldDelegate? { get set }

这意味着它不保留 delegate 实例,并且当 delegate 被释放时将被设置为 nil

您正在创建 delegate 并将其分配给局部变量 myTextFieldDelegate。该变量将在函数结束时被释放,因此即使您将 myTextFieldDelegate 分配给 myTextField.delegate,它也会被释放并且 myTextField.delegate 被设置为 nil 因为它很弱。

要解决此问题,请在 ViewController 中创建一个属性来保存委托(delegate)对象:

var myTextFieldDelegate: MyTextFieldDelegate?

关于ios - Swift:为什么我的 UITextFieldDelegate 方法没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44091103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com