首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在单元格导航时将collectionView单元格中的textView设置为firstResponder

在单元格导航时将collectionView单元格中的textView设置为firstResponder
EN

Stack Overflow用户
提问于 2018-06-06 04:38:35
回答 1查看 130关注 0票数 0

我有一个collectionView,允许用户向collectionView动态添加单元格。视图控制器一次只显示一个单元格,我希望第一个textView (它是单元格的一部分)成为firstResponder (并始终保持键盘可见),这在加载视图控制器时工作正常(在下面的一种情况下也是如此)。

我已经创建了一个方法来检测当前的单元格,在任何情况下我都会调用这个方法:(1)用户从一个单元格滚动到另一个单元格(放在scrollViewWillEndDragging中的方法),(2)用户点击UIButtons从一个单元格导航到另一个单元格,(3)用户点击UIButton在数组的末尾创建并附加一个新的单元格(由collectionView使用)。

方法如下:

代码语言:javascript
复制
func setNewFirstResponder() {
    let currentIndex = IndexPath(item: currentCardIndex, section: 0)
    if let newCell = collectionView.cellForItem(at: currentIndex) as? AddCardCell {
        newCell.questionTextView.becomeFirstResponder()
    }
}

现在我的问题是,这只在情况(1)中有效。显然,在情况(2)和(3)中,我没有AddCardCell类型的单元。当我打印currentCardIndex时,我在所有情况下都得到相同的结果,这非常令人困惑。

有什么提示为什么我在案例2和案例3中还不能获得cell,但我在案例1中呢?

下面是我使用的一些方法作为参考:

代码语言:javascript
复制
//Update index and labels based on user swiping through card cells
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    //Update index based on targetContentOffset
    let x = targetContentOffset.pointee.x
    currentCardIndex = Int(x / view.frame.width)

    setNewFirstResponder()
}

另一种方法,它不起作用(案例3):

代码语言:javascript
复制
//Method to add a new cell at end of collectionView
@objc func handleAddCell() {
    //Inserting a new index path into tableView
    let newIndexPath = IndexPath(item: autoSaveCards.count - 1, section: 0)
    collectionView.insertItems(at: [newIndexPath])

    collectionView.scrollToItem(at: newIndexPath, at: .left, animated: true)
    currentCardIndex = autoSaveCards.count - 1

    setNewFirstResponder()
}
EN

回答 1

Stack Overflow用户

发布于 2018-06-06 04:43:37

对于情况2,3我认为单元格还没有加载,所以if let失败,你可以尝试在一段时间后像这样调度它,另外一般注意如果单元格不可见,那么它是空的

代码语言:javascript
复制
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
   setNewFirstResponder()  
}

此外,如果将animated:false设置为scrollToItem,它也可以工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50708575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档