Ios 当带文本字段的UIAlertView关闭时,键盘未关闭

Ios 当带文本字段的UIAlertView关闭时,键盘未关闭,ios,iphone,objective-c,cocoa-touch,Ios,Iphone,Objective C,Cocoa Touch,好的,我有一个视图控制器,它以两种方式之一显示: 通过故事板序列 通过[MyViewController presentViewController:]手动执行 基本上,它是一个设置视图,可以通过导航到应用程序的设置部分来显示,或者如果用户需要在视图中输入一些内容,可以按需显示 在设置视图中,我有一个UIAlertView,它会弹出一个用户名和密码样式的警报。第一个文本字段设置为firstResponder,键盘显示正常。如果我解除警报(通过取消或任何其他按钮),键盘将消失 现在,关于这个问题:

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

  • 通过故事板序列
  • 通过[MyViewController presentViewController:]手动执行
  • 基本上,它是一个设置视图,可以通过导航到应用程序的设置部分来显示,或者如果用户需要在视图中输入一些内容,可以按需显示

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

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

    我尝试过将另一个视图设置为第一响应者,然后辞职,但没有帮助。 我试着打电话给[self.view-endEditing:YES],但没有用。 我已通过以下方式发送了全球辞职第一响应者:

    [[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
    
    但那没用。 我甚至连接了一个私有API来获取第一响应程序,但它将第一响应程序报告为(null)


    有什么想法吗

    创建UIAlertView后,您可以将self作为UIAlertView的代理。之后,在:

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

    方法您可以获取对文本字段的引用,并可以对其调用resignFirstResponder。

    我会确保在显示警报的视图控制器的视图生命周期的后期显示警报,例如

    - (void)viewDidAppear {
        [super viewDidAppear];
        [self performSelector:@selector(showTheAlert) afterDelay:0.0];
    }
    
    - (void)showTheAlert {
        // alloc, init and show the alert here
    }
    
    我会使用委托回调给textView第一响应者,例如

    - (void)didPresentAlertView:(UIAlertView *)alertView {
        [theUsernameTextField becomeFirstResponder];
    }
    
    任何解雇我都会用代表辞职。在不是第一响应者的文本字段上退出第一响应者不会有任何负面影响,所以请同时退出这两个字段

    - (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
    
        [theUsernameTextField resignFirstResponder];
        [thePasswordTextField resignFirstResponder];
    }
    

    实现下面的方法

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

    有没有关于示例代码的机会?我试图复制它,但无法使键盘不关闭。如果您关闭alertview,键盘将消失,请检查您的alertview是否正确设置了其代理这解决了问题-显然,我显示警报视图的时间太早,因此我猜代理没有被正确调用。谢谢