5

サブビューであるUIVIewがあり、いくつかのUITextFieldが含まれています。これらのテキストフィールドの1つ(DATE用)は、キーボードを使用して編集できないようにする必要があります。代わりに、Datepickerを内部に持つPopOverを使用します。

UIControlEventEditingDidBeginに達したときにメソッドを実行します。このメソッドはresignFirstResponder、DateTextFieldでを呼び出します。

DateTextFieldが最初に編集するフィールドである場合はすべて正常に機能しますが、別のtextFieldが編集され、もちろんキーボードが表示されてからDateFieldを編集しようとすると、キーボードは非表示にならず、すべてが正常になりますが、キーボードは何でも実行します。

endEditing:YES以前にメソッドを呼び出そうとしましたresignFirstResponderが、機能しません。endEditing:YESand resignFirstResponderon the text fieldメソッドを実行しようとしましたdidEndEditingが、そのキーボードを取り出す方法がありません。

これが私の方法です:

- (void)showDatePopOver:(id)sender{ 
    [self.view endEditing:YES];

    UITextField *textField = (UITextField *)sender;
    [sender resignFirstResponder]; // hide keyboard

    /** POP OVER LINES**/
}
4

1 に答える 1

2

textFieldShouldBeginEditing:で最初のレスポンダーを辞任する代わりに、デリゲートメソッドを使用する必要がありますdidBeginEditing

これにより、すべてのdateTextFieldテキストフィールドを編集できるようになります。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    return (![textField isEqual:dateTextField]);
}

ビューコントローラがテキストビューデリゲートであることも同様に指定する必要があります(インターフェイス宣言[.hファイル]で)。

@interface MyViewController : UIViewController <UITextFieldDelegate>
于 2012-09-14T19:06:29.747 に答える