使用UINavigationController时,在didSelectRowAtIndexPath中重新响应第一个响应者

时间:2013-01-17 00:01:55

标签: ios objective-c uitableview uinavigationcontroller

我想在UITableView中选择一行并在导航控制器内触发推送segue时,从当前编辑的文本字段中退出第一个响应者。这是在一个弹出窗口内发生的。

我尝试了两件事:

(1)我可以看到文本字段在动画时重新启动第一个响应者,但是当我返回到视图控制器时,它再次需要第一个响应者并显示键盘。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.view endEditing:YES];
}

(2)这将阻止在返回视图控制器时恢复编辑,但此方法会中断动画。在动画结束时,第一个视图控制器变黑并且稍微跳了一下。

编辑:刚刚意识到这只在横向模式下可见,因为它与键盘动画比推动动画更快,并且一旦键盘消失并且弹出窗口就会变黑当键盘为其留出空间时,将动画设置为更高的高度。在动画导航控制器中的推动画动画时,动画无法处理扩展弹出窗口。删除下面的代码并推送并让iOS删除键盘时,键盘和推送动画完全同时进行并避免此问题。我想知道如何在强迫辞职的同时让自己成为现实。

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.view endEditing:YES];

    return indexPath;
}

如何在更改视图控制器时重新签署第一响应者,而不是在导航回来时再次在文本字段上恢复第一响应者?

1 个答案:

答案 0 :(得分:0)

等一下。所以问题在于,当视图恢复时执行segue(并关闭视图)时,它会显示一种键盘阴影。是吗?在这种情况下。您可以尝试以下方法。当您单击tableviewcell时。做一个检查。如下。

if(firstResponder != nil){
    //register for keyboard hide notification
    [[NSSnotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:@"UIKeyboardDidHideNotification" object:nil];. 
    [firstResponder resignFirstResponder]; 
} else {
     [self performSegue:@"yoursegueidentifier" withSender:nil];
}  

如果没有响应者(因此不是键盘),那将只启动segue。如果有键盘,它会注册键盘隐藏通知,然后重新响应响应者。然后,在响应键盘隐藏

的方法中
- (void)keyboardDidHide:(NSNotification *)notification {
     [self performSegue:@"yoursegueidentifier" withSender:nil];
 }   

这应该只在键盘隐藏时执行segue,因此它应该解决动画问题。您可能需要修改故事板以从视图控制器启动segue,而不是从单元格的按钮启动,我不确定您的架构是如何的。让我知道这是否有效。