1

当在 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;
}

如何在更改视图控制器时辞职第一响应者而不在导航返回时再次恢复文本字段上的第一响应者?

4

1 回答 1

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,我不确定您的体系结构如何。让我知道这是否有效。

于 2013-01-17T04:09:20.707 回答