为啥从自定义单元格调用时 UIkeyboard 不动画?

Posted

技术标签:

【中文标题】为啥从自定义单元格调用时 UIkeyboard 不动画?【英文标题】:Why doesn't UIkeyboard animate when called from a Custom Cell?为什么从自定义单元格调用时 UIkeyboard 不动画? 【发布时间】:2013-07-21 12:17:58 【问题描述】:

我有一个 UItableViewCell 的子类

当用户触摸 CELL 时,我调用 reload,如下所示:

[_tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

// This is where magic happens...
[_tableView beginUpdates];
[_tableView endUpdates];

然后出现一个新的单元格。这个新单元格成为 _workName UITextField 的第一响应者,如下所示:

@implementation TWMainViewPlusExpandedCell

- (void) awakeFromNib
        
    [_workName becomeFirstResponder];


键盘出现,但没有动画。这是即时的!好像没有动画!

但是,当我通过调用 resignFirstResponder 退出键盘时,它会按预期以动画方式退出。

我错过了什么吗?

谢谢!

【问题讨论】:

【参考方案1】:

我认为您的单元格成为响应者并在重新加载引起的 tableview 动画之前或期间调出键盘。 试试

- (void) awakeFromNib
        
    [_workName performSelector:@selector(becomeFirstResponder) onThread:[NSThread getMainThread] withObject:nil withDelay:0.1];


我质疑你为什么要重新加载表格只是为了选择一个单元格。

【讨论】:

我正在重新加载表格,因为触摸会使新单元格出现在旧单元格的位置。这是错误的方法吗? 按照您的建议,我延迟了它,它解决了问题。难道没有更好的方法来做到这一点吗?在较旧的 iPhone 上,如果执行需要更多时间,动画就会停止。 问题是,如您所见,您所依赖的时机无法确定。延迟是一种解决方法。如果你得到你想要的结果,为什么要花更多的时间。 我不知道你想要完成的细节,但我假设你正在使单元格可编辑并修改布局。该代码应该真正保留在您的自定义单元格中。这样您就可以控制动画并在完成时成为第一响应者。这样你就可以保证事件的顺序。 不可编辑,只是加载一个新的,但这确实很有意义。现在我想起来了,我真的不认为我需要 2 个细胞......谢谢你的洞察力先生。

以上是关于为啥从自定义单元格调用时 UIkeyboard 不动画?的主要内容,如果未能解决你的问题,请参考以下文章

为啥从自定义 UIView 向 UIButton 添加子视图不显示添加的子视图?

从自定义单元格访问父视图

从自定义单元格返回 NSIndexPath ? (UITableView)

Segue 未从自定义 tableView 单元格触发

SWIFT:从自定义单元格中的 UIswitch 展开/折叠自定义单元格

从自定义单元格重新加载表格视图数据