当UIAlertView与文本字段被解除时,键盘不会被解雇

时间:2013-12-02 19:21:26

标签: ios iphone objective-c cocoa-touch

好的,所以我有一个以两种方式显示的视图控制器:

  1. 通过故事板segue
  2. 手动通过[MyViewController presentViewController:]。
  3. 基本上,这是一个设置视图,可以通过导航到应用程序的设置部分或按需显示,如果用户需要在视图中输入内容。

    在设置视图中,我有一个UIAlertView,弹出一个用户名和密码样式警报。第一个文本字段设置为firstResponder,键盘显示为正常。如果我解除警报(通过取消或任何其他按钮),键盘将消失。

    现在,针对这个问题: 如果我通过segue显示视图控制器,一切正常。 如果我手动显示,无论我做什么,键盘都不会解雇。

    我尝试设置另一个视图作为第一响应者然后辞职,这没有帮助。 我试过调用[self.view endEditing:YES],但这没有用。 我通过以下方式发送了全球resignFirstResponder:

    [[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
    

    但这没有用。 我甚至连接了一个私有API来获得第一个响应者,但是它将第一个响应者报告为(null)。

    有什么想法吗?

3 个答案:

答案 0 :(得分:0)

创建UIAlertView后,您可以将自己视为UIAlertView的委托。之后:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

方法你可以参考你的文本字段,你可以在上面调用resignFirstResponder。

答案 1 :(得分:0)

我确保在呈现它的视图控制器的视图生命周期的后期显示警告,例如。

- (void)viewDidAppear {
    [super viewDidAppear];
    [self performSelector:@selector(showTheAlert) afterDelay:0.0];
}

- (void)showTheAlert {
    // alloc, init and show the alert here
}

我会使用委托回调来给tex​​tView第一响应者,例如

- (void)didPresentAlertView:(UIAlertView *)alertView {
    [theUsernameTextField becomeFirstResponder];
}

我会让代表解雇辞职。在不是第一响应者的文本字段上辞职第一响应者没有任何缺点,所以只需重新签名。

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {

    [theUsernameTextField resignFirstResponder];
    [thePasswordTextField resignFirstResponder];
}

答案 2 :(得分:0)

实施以下方法

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{ 
      UITextField *txtField = [alertView textFieldAtIndex:buttonIndex];
      [txtField resignFirstResponder];
}