ビューコントローラーをモーダルとして提示しています。このView Controllerには、IB経由で接続されたいくつかのUITextFieldがあります。
私の問題は、return キーを押すと、デリゲート メソッドが呼び出されることですが、何らかの理由で、指定された textField での rejectFirstResponder への呼び出しが呼び出されないことです。textFieldShouldReturn デリゲート メソッドでコンソールにメッセージを出力しても、メッセージは出力されますが、resign メソッドの呼び出しは単に拒否されます。
shouldReturn デリゲート メソッドには、次のものしかありません。
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
これは私には実際に起こったことはありません。前に述べたように、shouldReturn メソッドが呼び出され、呼び出されることを確認するためだけに、コンソールに出力を配置できます。
また、デリゲートが設定されているかどうかを確認するためにこれを試してみましたが、UITextField の動作が確実に変更されました。
-(void)textFieldDidBeginEditing:(UITextField *)textField {
[textField setTextAlignment:UITextAlignmentCenter];
}
この問題は本当に私を困惑させます。テキストフィールドで直接 rejectFirstResponder を呼び出そうとしても、キーボードは消えません。
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
if ([textField isEqual:self.productTextField]) {
NSLog(@"Product textfield");
[self.productTextField resignFirstResponder];
} else if ([textField isEqual:self.quantityTextField]) {
NSLog(@"Quantity textfield");
}
return YES;
}
両方のログは、それぞれのテキストフィールドで機能し、対応するメッセージをそれぞれ出力します。ただし、テキストフィールドに直接メッセージを送信する場合、メソッドを呼び出しても何もしません。
どうやら、UIPresentationFormSheetではキーボードを取り除くことができません。別のプレゼンテーション スタイルを試してみたところ、うまくいきました。@Cal、ご質問ありがとうございます。