PopViewControllerAnimated:YES 当点击 UIAlertView 使键盘出现在 parentVC

Posted

技术标签:

【中文标题】PopViewControllerAnimated:YES 当点击 UIAlertView 使键盘出现在 parentVC【英文标题】:PopViewControllerAnimated:YES when tap on UIAlertView make Keyboard appear in parentVC 【发布时间】:2015-04-21 04:05:05 【问题描述】:

我尝试以编程方式 popViewcontroller 通过这样做

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

   [[self navigationController] popViewControllerAnimated:YES];


问题是我在这个 VC 中有 textFields。如果 textField 处于活动状态并且键盘正在显示,并且如果我使用 to 命令退出键盘 ([[self view] endEditing:YES] or [textField resignFirstResponder]) 显示 AlertView。然后调用命令 popViewControllerAnimated:YES 。当前 VC 被关闭,但在父 VC 出现后短暂关闭。会有一个键盘显示大约 1 秒钟然后消失。

这种行为很烦人。反正有解决这个问题吗?我注意到通过使用[[self navigationController] popViewControllerAnimated:NO] 键盘不会出现。但我更喜欢在我的应用程序中添加动画。

请帮忙。

提前致谢

【问题讨论】:

【参考方案1】:

我通过制作 [[self navigationController] popViewControllerAnimated:YES]; 解决了这个问题调用时延迟。

   dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 100 *      NSEC_PER_MSEC), dispatch_get_main_queue(), ^
    [[self navigationController] popViewControllerAnimated:YES];
);

【讨论】:

【参考方案2】:

@KongHantrakool 的回答有效但也有不足,可以在 - (void)willPresentAlertView:(UIAlertView *)alertView 中添加 [[self view] endEditing:YES] 或 [textField resignFirstResponder] ,会更好。

【讨论】:

我不得不使用这个解决方案以及标记的答案来解决问题。【参考方案3】:

你也可以试试这个代码:

#pragma mark - UIAlertView Delegate

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

    [self performSelector:@selector(popViewController) withObject:nil afterDelay:0.1];


- (void)popViewController 
    [self.navigationController popViewControllerAnimated:YES];

【讨论】:

【参考方案4】:

试试这个,我想它可能对你有帮助

 - (void)viewWillAppear:(BOOL)animated
 
      [textField resignFirstResponder];
 

【讨论】:

【参考方案5】:

我也遇到了这个问题,发现延迟解决方案根本不起作用。 alertView 会记住键盘的状态,所以当alertView被dismiss时,它会恢复键盘。所以问题就出来了:在我们弹出 viewController 大约 1 秒后,键盘出现了。

这是我的解决方案: 在弹出视图控制器之前,我们只需要确保键盘的状态是隐藏的。

    首先我们添加一个属性并注册键盘通知来监控键盘的状态:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
@property (nonatomic) BOOL keyboardDidShow;
    实现 funs:keyboardDidHide: 和 keyboardDidShow:
- (void)keyboardDidHide:(NSNotification *)notification 
    self.keyboardDidShow = NO;
    if (self.needDoBack) 
        self.needDoBack = NO;
        [self showBackAlertView];

    


- (void)keyboardDidShow:(NSNotification *)notification 
    self.keyboardDidShow = YES;

    做你的流行音乐:
- (void)back 
    if (self.keyboardDidShow) 
        self.needDoBack = YES;
        [self.view endEditing:YES];
     else 
        [self showBackAlertView];
    

【讨论】:

以上是关于PopViewControllerAnimated:YES 当点击 UIAlertView 使键盘出现在 parentVC的主要内容,如果未能解决你的问题,请参考以下文章

popViewControllerAnimated 改变 UINavigationBar 的 UIColor

performSegueWithIdentifier 和 popViewControllerAnimated 破屏导航

UIAlertView 不应调用 popViewControllerAnimated

想使用 popViewControllerAnimated 而不是 popToRootViewControllerAnimated

导航控制器 popViewControllerAnimated :是的没有按预期工作

防止 uinavigationcontroller 设置中 popViewControllerAnimated 的错误访问崩溃