4

UITextField への入力として、UIActionSheet 内に UIDatePickerView があります。UITextField にフォーカスすると、キーボードの代わりに UIActionSheet がポップアップします。UIActionSheet の完了ボタンをクリックすると、非表示になります。他のいくつかのテキスト フィールドを通常どおりに動作させています (キーボードの表示)。

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    if ([textField isEqual:txtExpDate]) {
        [textField resignFirstResponder];
        [self showDatePicker];
    }
}


- (void) showDatePicker{
    UIActionSheet *datePickerActionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"Done" otherButtonTitles:nil];
    datePickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 80, 0, 0)];
    datePickerView.datePickerMode = UIDatePickerModeDate;
   [datePickerActionSheet addSubview:datePickerView];
   [datePickerActionSheet showInView:self.navigationController.view];
   [datePickerActionSheet setBounds:CGRectMake(0, 0, 320, 500)];
   [datePickerActionSheet release];

}

今私の問題は、最初のユーザーが通常のテキストフィールドをタップするとしましょう。キーボードがポップアップします。次に、完了ボタンを選択せず​​に、日付フィールドをタップします。アクションシートをポップアップします(キーボードを閉じることなく)。アクションシートを非表示にした後、ユーザーは他のテキスト フィールドをタップし、キーボードのリターン キーをクリックする必要があります。

アクションシートがポップアップする場合、キーボードを非表示にしたいですか?

4

6 に答える 6

7

アクション シートを表示するときは、テキスト フィールドをrejectFirstResponderにします。複数のテキスト フィールドがある場合は、.hファイルに UITextField タイプのインスタンス変数を作成します。

UITextField *currentTextField;

次に、現在のテキスト フィールドの参照をtextFieldDidBeginEditing:メソッドで保持できます。

- (void)textFieldDidBeginEditing:(UITextField *)textField {

    currentTextField = textField;
    ....

そして、showDatePickerメソッドで[currentTextField rejectFirstResponder]を呼び出します。

- (void)showDatePicker {

    [currentTextField resignFirstResponder];
    UIActionSheet *datePickerActionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"Done" otherButtonTitles:nil];
    ...

編集: @Samuel Goodwinは正しいです。テキスト フィールドを追跡する必要はありません。次のようにして、キーボードを閉じることができます。

- (void)showDatePicker {

    [self.view endEditing:YES];
    ...
于 2011-07-23T09:21:09.143 に答える
0

EmptyStackによって提案された方法は私には機能しませんでした(xcode4.2を使用)。メッセージ[currentTextField resignFirstResponder]をメソッドに配置しましたがwillPresentActionSheet:(UIActionSheet *)actionSheet、これも機能しませんでした。それから私はメッセージを入れました、そしてそれ actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndexはトリックをしました...奇妙です!

于 2011-11-25T12:05:39.390 に答える
0

正常に動作しています。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    if(textField==myTextField2){
        [myTextField1 resignFirstResponder];
        [self showActionSheet];
        return NO;
    }
    return YES;      
}
于 2014-10-13T09:48:29.953 に答える
0
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if ([textField isEqual:txtExpDate]) {

        [self showDatePicker];
        return NO;
    }
    return YES;

}
于 2012-08-04T04:30:35.687 に答える
0

私はこれが非常に古い投稿であることを知っていますが、私のために働いた解決策を追加したいと思っただけです (他の人はしませんでした)。テキストフィールドを最初の応答者として再割り当てし、再度辞任する必要があることがわかりました。どのテキスト フィールドが最初のレスポンダーのステータスを失うかは問題ではありません。これは、そのキーボードを捨てる方法にすぎません。

[self.textfield becomeFirstResponder];
[self.textfield resignFirstResponder];
于 2013-08-19T11:14:13.563 に答える