7

このサイトを検索したところ、現在直面している問題の解決策が見つかりませんでした。誰かが助けてくれることを願っています。

ユーザーにiPhoneアプリに名前を入力するように求めるUIAlertViewを作成しました。

    UIAlertView *enterNameAlert = [[UIAlertView alloc] initWithTitle:@"Enter your name"
                                                             message:@"\n\n\n"
                                                            delegate:self
                                                   cancelButtonTitle:NSLocalizedString(@"Cancel", nil)
                                                   otherButtonTitles:NSLocalizedString(@"OK", nil),nil];

    UITextField *enterNameField = [[UITextField alloc] initWithFrame:CGRectMake(16, 83, 252, 25)];
    enterNameField.keyboardAppearance = UIKeyboardAppearanceAlert;
    enterNameField.borderStyle = UITextBorderStyleRoundedRect;
    enterNameField.autocorrectionType = UITextAutocorrectionTypeNo;
    enterNameField.clearButtonMode = UITextFieldViewModeWhileEditing;
    enterNameField.returnKeyType = UIReturnKeyDone;
    enterNameField.delegate = self;
    [enterNameField becomeFirstResponder];
    [enterNameAlert addSubview:enterNameField];

    [enterNameAlert show];
    [enterNameAlert release];
    [enterNameField release];

ヘッダーファイルのUITextFieldDelegateに準拠するようにこのviewControllerを設定し、textFieldShouldReturn:ユーザーが[完了]を押したときにキーボードを閉じようとする実装を行いました。

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if ([textField isFirstResponder]) {
        [textField resignFirstResponder];
        NSLog(@"text field was first responder");
    } else {
        [textField becomeFirstResponder];
        [textField resignFirstResponder];
        NSLog(@"text field was not first responder");
    }
    NSLog(@"textfieldshouldreturn");
    return YES;
}

デバッガーで、[完了]ボタンをタップすると、このメソッドが正常に呼び出されたことを確認します。そのとき、textFieldが最初のレスポンダーになります。ただし、キーボードは消えませんが、小さなclearButtonは消えます。[完了]ボタンをもう一度クリックしても何も呼び出されないため、textFieldが最初のレスポンダーではなくなったことは明らかです。[完了]ボタンでキーボードを閉じたいだけです。誰かが解決策を提供できますか?百万ありがとう。

4

6 に答える 6

6

enterNameAlertまず、ininterfaceヘッダーを定義する必要があります。次に、以下のコードを使用します。

- (void)viewDidLoad {    
    [super viewDidLoad];
    enterNameAlert = [[UIAlertView alloc] initWithTitle:@"Enter your name"
                                                             message:@"\n\n\n"
                                                            delegate:self
                                                   cancelButtonTitle:NSLocalizedString(@"Cancel", nil)
                                                   otherButtonTitles:NSLocalizedString(@"OK", nil),nil];

    UITextField *enterNameField = [[UITextField alloc] initWithFrame:CGRectMake(16, 83, 252, 25)];
    enterNameField.keyboardAppearance = UIKeyboardAppearanceAlert;
    enterNameField.borderStyle = UITextBorderStyleRoundedRect;
    enterNameField.autocorrectionType = UITextAutocorrectionTypeNo;
    enterNameField.clearButtonMode = UITextFieldViewModeWhileEditing;
    enterNameField.returnKeyType = UIReturnKeyDone;
    enterNameField.delegate = self;    
    [enterNameAlert addSubview:enterNameField];
    [enterNameField becomeFirstResponder];
    [enterNameAlert show];    
    [enterNameField release];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if ([textField isFirstResponder]) {
        [textField resignFirstResponder];
        [enterNameAlert dismissWithClickedButtonIndex:1 animated:YES];
        [enterNameAlert release];
        NSLog(@"text field was first responder");
    } else {
        [textField becomeFirstResponder];
        [textField resignFirstResponder];
        NSLog(@"text field was not first responder");
    }
    NSLog(@"textfieldshouldreturn");
    return YES;
}
于 2010-11-24T11:29:48.790 に答える
0

resignFirstResponderメソッドを呼び出した後、テキストフィールドの解放をdelegateメソッドに移動するとどうなりますか?

于 2010-10-07T20:49:33.673 に答える
0

TextFieldの「DidEndOnExit」イベントでresignFirstResponderを使用してキーボードを閉じてみてください。

次に、TextFieldへのデータの入力が終了したら、キーボードの[完了]ボタンを押してキーボードを閉じてみます。

お役に立てれば。

于 2010-10-12T04:27:47.677 に答える
0

別のオブジェクトになり、すぐにファーストレスポンダーを辞任させます。

于 2010-10-14T14:34:54.357 に答える
0

単にする

[mytextField addTarget:self 
            action:@selector(methodToFire:)
            forControlEvents:UIControlEventEditingDidEndOnExit];
于 2012-01-26T21:52:42.703 に答える
0

ストーリーボードでこれに問題がある場合は、uitextfieldsプロパティに移動し、ストーリーボード内のデリゲートからルートビューコントローラーにctrl +ドラッグして、すべてを修正する必要がありました。

于 2013-04-11T08:46:34.323 に答える