首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >展开函数swift 3

展开函数swift 3
EN

Stack Overflow用户
提问于 2017-06-28 12:14:35
回答 2查看 72关注 0票数 0

在我的一生中,我不明白为什么我不能让这个函数在indexPath被选中的情况下工作。

当我在didSelectItemAtIndexPath中行中添加一个断点时,它会断开,但是当我在viewscontroller类中添加一个断点时,它不会断开。这就好像信息正在发送,但无法到达目的地。我在我的控制台没有得到任何错误,我已经检查了很多次。

这可能是xcode的bug,还是我漏掉了什么?

下面是我引用它所在的类的位置

代码语言:javascript
复制
var viewsController: ViewsController?

这是我的didSelectItemAtIndexPath

代码语言:javascript
复制
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    viewsController?.scrollToMenuIndex(indexPath.item)
    print(indexPath.item)

}

下面是函数本身

代码语言:javascript
复制
func scrollToMenuIndex(_ menuIndex: Int) {
    let indexPath = IndexPath(item: menuIndex, section: 0)
    collectionView?.scrollToItem(at: indexPath, at: UICollectionViewScrollPosition(), animated: true)

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-28 12:34:19

您的viewsController已声明,但尚未初始化。因此,调用哪个类方法是未知的。

代码语言:javascript
复制
var viewsController: ViewsController?

如果scrollToMenuIndex在同一个类中,只需要scrollToMenuIndex(indexPath.item)就足够了!如果它不在同一个视图控制器中,则需要将viewsController初始化为

代码语言:javascript
复制
 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
     let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
     let viewsController= storyboard.instantiateViewController(withIdentifier: "someViewController")
     viewsController?.scrollToMenuIndex(indexPath.item)
     print(indexPath.item)
  }

希望能有所帮助。编码快乐!!

票数 0
EN

Stack Overflow用户

发布于 2017-06-28 14:19:41

当引用有效时,将为viewsController返回nil。

因此,在引用集合视图的闭包中,集合视图包含我用于didSelectItemAtIndexPath (位于viewsController)的单元格,

我不得不添加c.viewsController = self,这就解决了这个问题。

我必须看一下文档中关于这一点的说明。如果还没有人解释这个行为,我会更新我的答案。

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

https://stackoverflow.com/questions/44793544

复制
相关文章

相似问题

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