UITextField 没有成为集合视图中的第一响应者

Posted

技术标签:

【中文标题】UITextField 没有成为集合视图中的第一响应者【英文标题】:UITextField not becoming first responder in collection view 【发布时间】:2016-07-06 20:08:28 【问题描述】:

我的收藏视图单元格中有一个UITextField。我希望它在该单元格出现在屏幕上时立即成为第一响应者。

所以,我在cellForItemAtIndexPath 中调用[cell.textField becomeFirstResponder]。但是,这仅在应用程序打开时有效(包含 uitextfield 的单元格在应用程序启动时已经可见),如果我从单元格滚动而不是滚动回它,则文本字段不再成为第一响应者。

可能是什么问题?

编辑:我在调用becomeFirstResponder之前以编程方式将集合视图滚动到包含UITextField的单元格

【问题讨论】:

您可以在滚动到特定单元格的位置发布您的代码吗? 我用一种稍微不同的方法解决了它,检查我的答案! 【参考方案1】:

似乎集合视图的滚动使集合视图成为第一响应者,直到滚动完成,所以我让我的文本字段成为这个委托方法中的第一响应者:

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

【讨论】:

【参考方案2】:

你应该把代码放在

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath

功能按照class ref:

告诉代理指定的单元格即将显示在集合视图中。

【讨论】:

谢谢,今晚一定会试试的!在那之前,如果 cellForItemAtIndexPath 不起作用,你能告诉我为什么这会起作用吗? 似乎这个函数是在单元格即将被绘制之前被调用的,而不仅仅是在它最初被绘制的时候,所以它应该可以工作。 另外,请注意您的答案是针对 UITableView,我使用的是 UICollectionView。但是,自 ios 8 以来也有类似的方法: - (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath 我的错,现在就改。他们的方法和你说的一样,所以思路是一样的。 不,不幸的是,这也不起作用,我编辑了答案以提供更多信息!

以上是关于UITextField 没有成为集合视图中的第一响应者的主要内容,如果未能解决你的问题,请参考以下文章

Swift:成为UITextField上的第一响应者?

成为没有动画的第一响应者

UITextField 不能成为 UITableView 中的第一响应者

Swift:成为 UITextField 上的第一响应者不起作用?

如果通过附件视图添加到 UITableViewCell,UITextField 无法成为第一响应者

UITableView 中的 UITextField:设置表格的第一响应者视图,但我们不知道它的类型(单元格/页眉/页脚)