来自CollectionViewCell的Swift segue无法显示新视图

时间:2014-11-19 14:05:42

标签: ios iphone swift uicollectionview

当我选择CollectionView中的单元格时,我只想加载一个新视图。

网上任何地方都说它就像在故事板中注册新视图和导航控制器一样简单,然后 Ctrl +点击从CollectionViewCell拖动到新视图。

完成此操作后,代码将编译并运行,但单击我的单元格时不会显示新视图。我错过了什么?

故事板说从CollectionView到我的下一个视图(用正确的名称和所有名称识别)有一个segue,所以我有点困惑......

编辑:这是我的CollectionView控制器代码,以防我在这里做了导致问题的事情。这是一个日历页面(你可以从代码中看出来):

IBOutlet weak var calendarCollection: UICollectionView!
var collectionView: UICollectionView?
let calendarCellIdentifier: String = "calendarCell"

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 50, left: 10, bottom: 10, right: 10)
    layout.itemSize = CGSize(width: 60, height: 60)
    collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
    collectionView!.dataSource = self
    collectionView!.delegate = self
    collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: calendarCellIdentifier)
    collectionView!.backgroundColor = UIColor.blackColor()
    self.view.addSubview(collectionView!)
}

// Return the collectionView cell at IndexPath
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell: UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(calendarCellIdentifier, forIndexPath: indexPath) as UICollectionViewCell
    cell.backgroundColor = UIColor.blueColor()
    return cell
}

func collectionView(collectionView: UICollectionView, shouldHighlightItemAtIndexPath indexPath: NSIndexPath) -> Bool {
    return true
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return challengeDurationDays
}

2 个答案:

答案 0 :(得分:0)

对于有类似问题的人,我通过使用didSelectItemAtIndexPath方法手动触发segue来解决这个问题。我认为我不应该这样做,但也许我误解了。无论是那还是一个错误。我最后添加到CollectionViewController的方法如下:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    performSegueWithIdentifier("dayViewSegue", sender: calendarCollection)
}

答案 1 :(得分:0)

我在使用CollectionView时遇到了类似的麻烦(使用Xcode 6.1.1 for iOS 8 app)。我在故事板中设置了一个segue,从CollectionViewCell到另一个ViewController的选择,但在触摸单元格时它不会自动生效。此外,我将CollectionViewCell子类化,将我的故事板中的单元格类设置为我的自定义类(MazeCollectionViewCell),并在我的类中建立IBOutlets连接到图像和标签I放在故事板单元格中。但是,当我尝试使用collectionView cellForItemAtIndexPath方法访问图像和/或标签时,它们是零。

当我从viewDidLoad方法删除 registerClass调用时,我的所有问题都得到了解决[在我的情况下,我删除了collectionView!.registerClass(MazeCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)]。就是这样!

我的猜测registerClass调用导致CollectionViewController创建我指定的类的空白副本并忽略故事板中的模板(因此我的segue)我的插座连接在为集合创建的单元格中无效。

如果有人有进一步的见解,我很乐意听到,但这是对我有用的解决方案。