私はプログラムでUITextView
を作成し、イベントを処理するためのデリゲートを作成しようとしています。私は追加してUITextView
を作成することができますが、UITextFieldDelegate
メソッドのどれもが追加されていません。 これはなぜでしょうか?Swift:私の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)
このコードは次のとおりです。この問題を解決するには
は、デリゲートオブジェクトを保持するために、あなたの
ViewController
でプロパティを作成しますか? 'viewDidLoad()'の内部? – vacawama誰かがそれに強いポインタを持っていないので、あなたの問題は 'myTextFieldDelegate'が解放されていることです。あなたの 'ViewController'に、myTextFieldDelegateを保持するプロパティを作成して、関数が戻るときに解放されるローカル変数に代入します。 – vacawama
最初は 'viewDidLoad'の内部ではなかったので、それを修正してまだ動作していませんでした。しかし、私のカスタムViewController上でmyTextFieldDelegateプロパティを作成したとき(ガベージコレクションを取得しないようにするため)出来た!ありがとうございました!あなたが答えとしてそれを置くなら、私はそれを受け入れます。 –