【问题标题】:UIAlertView keyboard doesn't get shown unless app is re-opened除非重新打开应用程序,否则不会显示 UIAlertView 键盘
【发布时间】:2012-07-19 14:50:45
【问题描述】:

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

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

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

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

我能做些什么来确保键盘第一次显示出来?

【问题讨论】:

  • 你能让文本字段成为第一响应者吗?
  • @l3v 我试过了,我认为这可能是viewWillAppear中的问题
  • 可能是,我刚刚在viewWillAppear 中尝试了一个警报视图,并且第一次弹出了键盘。

标签: ios ios5 uialertview


【解决方案1】:

这是一个奇怪的行为,你为什么不尝试在下一个运行循环中显示警报

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。就我而言,在我显示警报时键盘已经可见。我通过在显示警报之前关闭键盘来解决它:

    [myTextField resignFirstResponder];
    [myAlert show];
    

    【讨论】:

      【解决方案3】:

      我不完全确定,但也许这可行?

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-29
        • 2011-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多