私はSequencedTextFields
プロトコルを持っています。このプロトコルには一連のテキストフィールドが含まれています。ユーザがキーボードのReturn
ボタンをタップすると、現在のテキストフィールドは最初のレスポンダを辞退し、シーケンス内の次のテキストフィールドが最初のレスポンダになるはずです。そして、それは私がビューコントローラのUITextFieldDelegate
プロトコルの直接の実装を使用していたときに、良い作品:私はdefault
実装を使用しようとしているとき、UITextFieldDelegate拡張関数がトリガしません、なぜですか?
extension MyViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
nextInSequence(after: textField)?.becomeFirstResponder()
return true
}
}
をしかし、それは今までトリガーしません:
extension UITextFieldDelegate where Self: SequencedTextFields {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
nextInSequence(after: textField)?.becomeFirstResponder()
return true
}
}
何が原因でしょうか?または私は何かを逃したのですか?
UPDATE:
私のビューコントローラ定義:
final class MyViewController: UIViewController, UITextFieldDelegate, SequencedTextFields
は、テキストフィールドのデリゲートを設定:

あなたは適切にデリゲートを設定していますか? – Nullify
@Nullifyはい、コードの最初の例を使用しているときに動作します –
自分にテキストフィールド代理人を設定する場所を教えてください。あなたのtextfield.delegate = selfを? SequencedTextFields – Nullify