PopViewControllerAnimated:当点击UIAlertView使得键盘出现在parentVC中时为YES

时间:2015-04-21 04:05:06

标签: ios objective-c uiviewcontroller uinavigationcontroller

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

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

   [[self navigationController] popViewControllerAnimated:YES];

}

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

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

请帮忙。

提前致谢

5 个答案:

答案 0 :(得分:5)

我解决了这个问题,我[[self navigationController] popViewControllerAnimated:YES];被叫时被推迟。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您也可以尝试以下代码:

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

答案 3 :(得分:0)

尝试这个我认为它可以帮助你

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

答案 4 :(得分:0)

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

这是我的解决方案: 我们只需要在弹出viewcontroller之前确保隐藏键盘的状态。

  1. 首先,我们添加一个属性并注册键盘通知,以监控键盘的状态:
  2. [[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;
    
    1. 实现乐趣:keyboardDidHide:和keyboardDidShow:
    2. - (void)keyboardDidHide:(NSNotification *)notification {
          self.keyboardDidShow = NO;
          if (self.needDoBack) {
              self.needDoBack = NO;
              [self showBackAlertView];
      
          }
      }
      
      - (void)keyboardDidShow:(NSNotification *)notification {
          self.keyboardDidShow = YES;
      }
      
      1. 做你的流行音乐:
      2. - (void)back {
            if (self.keyboardDidShow) {
                self.needDoBack = YES;
                [self.view endEditing:YES];
            } else {
                [self showBackAlertView];
            }
        }