【发布时间】:2018-11-29 23:21:22
【问题描述】:
我有一个collectionView。我设置了它的 dataSource 和委托方法,当用户第一次进行选择时,我调用 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { },效果很好。
如果用户离开视图控制器并返回到它,我会在 viewWillAppear 中调用以下方法以编程方式强制选择单元格并滚动回最初选择的单元格。
let whateverCellWasChosen = 29
let indexPath = IndexPath(item: whateverCellWasChosen, section: 0)
collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: false)
collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .centeredHorizontally)
// problem is here
collectionView(self.collectionView, didSelectItemAt: indexPath)
但是在尝试调用 didSelectItem 的手动版本时,我不断收到以下错误:
不能调用非函数类型'UICollectionView'的值
错误源于接受collectionView的第一个参数。为什么会给我带来问题?
【问题讨论】:
-
您不应该尝试自己调用任何数据源或委托方法。
-
不知道你的上下文,但这里有一个类似的问题,我的回答与它齐头并进stackoverflow.com/questions/35039756/…
-
@rmaddy 这是一个日历,用户选择一个日期,我将日期保存在自定义委托中,他们弹出 vc,然后返回它,我希望他们仍然可以看到他们的日期选择。在视图 didAppear 中,我以编程方式滚动到日期,然后手动选择它。我读过一些帖子说使用 collectionView.selectItem(at: ...) 不会触发 didSelect stackoverflow.com/a/45412980/4833705
-
如果您有要在 didSelectRowAt 中运行的代码,然后将其放入函数中并从
didSelectRowAt和viewWillappear调用它,没有尝试过,但我认为这不会像最后调用didSelectRowAt的 ios 那样选择行 -
这是否在与 CollectionView 委托相同的类的 viewWillAppear 中?
标签: ios swift uicollectionview