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 回答