0

ユーザーがアプリを開いたときに、デフォルトに保存されている値を確認したいのですが、値が存在しない場合は、ユーザーに値の入力を求めます。値の保存/読み取りは機能しているようです。

-(void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSLog(@"Checking if there is an email address set");
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString * emailAddress = [defaults objectForKey:@"emailAddress"];
    if (IsEmpty(emailAddress))
    {
        NSLog(@"email address is blank, prompting user to enter one..");
        self.emailPromptAlert = [[UIAlertView alloc] initWithTitle:@"Alert"
                                                          message:@"Enter Email address:" 
                                                         delegate:self 
                                                cancelButtonTitle:@"Cancel" 
                                                otherButtonTitles:@"OK", nil];
        [self.emailPromptAlert setAlertViewStyle:UIAlertViewStylePlainTextInput];
        [self.emailPromptAlert setTag:1];
        [self.emailPromptAlert show];
    }
}

私が抱えている問題は、アプリをクリーンインストールして初めてロードしたときに、アラートが期待どおりに表示されるのにキーボードが表示されないため、ユーザーが実際に何も入力できないことです。

ホームボタンをクリックしてからアプリを再びフォアグラウンドに戻すと、同じアラートが画面に表示されますが、今回はキーボードが実際に表示されています。

キーボードが最初に表示されるようにするにはどうすればよいですか?

4

3 に答える 3

3

これは奇妙な動作です。次の実行ループでアラートを表示してみませんか

[self.emailPromptAlert performSelector:@selector(show) withObject:nil afterDelay:0];
于 2012-07-19T15:17:04.997 に答える
1

私も同じ問題を抱えていました。私の場合、アラートを表示した時点でキーボードはすでに表示されていました。アラートを表示する前にキーボードを閉じることで解決しました:

[myTextField resignFirstResponder];
[myAlert show];
于 2014-11-12T23:52:32.153 に答える
0

よくわかりませんが、これでうまくいくのでしょうか?

self.emailPromptAlert = [[UIAlertView alloc] initWithTitle:@"Alert"
                                                      message:@"Enter Email address:" 
                                                     delegate:self 
                                            cancelButtonTitle:@"Cancel" 
                                            otherButtonTitles:@"OK", nil];
[self.emailPromptAlert setAlertViewStyle:UIAlertViewStylePlainTextInput];
[self.emailPromptAlert setTag:1];

[self.emailPromptAlert show];

//try this?
UITextField *textField = [self.emailPromptAlert textFieldAtIndex:0];
[textField becomeFirstResponder];

これは、そもそもなぜ表示されないのかという問題の根本に到達するわけではありませんが、解決策になる可能性があります。

于 2012-07-19T15:06:46.627 に答える