除非重新打开应用程序,否则UIAlertView键盘不会显示

时间:2012-07-19 14:50:46

标签: ios ios5 uialertview

当用户打开我的应用程序时,我想检查存储在默认值中的值,如果它不存在则提示用户输入值。存储/读取值似乎正在起作用。

-(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];
    }
}

我遇到的问题是,当我第一次清理安装我的应用程序并加载时,警报会按预期显示,但没有显示键盘,因此用户实际上无法输入任何内容。

单击主页按钮,然后将应用程序重新置于前台,屏幕上显示相同的警报,但这次键盘实际显示。

我该怎么做才能确保第一次显示键盘?

3 个答案:

答案 0 :(得分:3)

这是一种奇怪的行为,为什么不尝试在下一个runloop中显示警报

[self.emailPromptAlert performSelector:@selector(show) withObject:nil afterDelay:0];

答案 1 :(得分:1)

我遇到了同样的问题。在我的情况下,键盘在我显示警报时已经可见。我通过在显示警告之前解除键盘来解决它:

[myTextField resignFirstResponder];
[myAlert show];

答案 2 :(得分: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];

这并没有真正解决为什么它首先没有显示的问题的根源,但它可能是一个解决方案。