我想在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;
}
如何在更改视图控制器时重新签署第一响应者,而不是在导航回来时再次在文本字段上恢复第一响应者?
答案 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,而不是从单元格的按钮启动,我不确定您的架构是如何的。让我知道这是否有效。