Swift collectionView不可重用的单元格

时间:2016-03-06 23:52:30

标签: ios swift uicollectionview uicollectionviewcell

我有一个包含2个部分的collectionView,每个部分应基于相同的单元格(仅包含UIImageView)。 这些部分之间的唯一区别是它们应包含的单元格数量和显示的图像类型。

如果我将cellforItemAtIndexPath方法设置为使用出队的单元格(collectionView.dequeueReusableCellWithIdentifier),则所有内容都可以正常填充,如果我将其设置为使用自定义单元格的实例而不出列,则会崩溃。

cellForItemAtIndexPath方法:

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        //cannot use dequedReusableCell since some cells below scroll-line should remain highlighted
        let cell = NumbersCollectionViewCell() // CAUSES CRASH
//        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(Constants.cellIdentifier, forIndexPath: indexPath) as! NumbersCollectionViewCell // WORKS FINE
        switch indexPath.section {
        case 0: cell.imageView.image = UIImage(named: numberImageFiles[indexPath.row])
        case 1: cell.imageView.image = UIImage(named: specialNumberImageFiles[indexPath.row])
        default: break
        }
        return cell
    }

NumbersCollectionViewCell定义:

class NumbersCollectionViewCell: UICollectionViewCell {
    @IBOutlet weak var imageView: UIImageView!
}

出现的错误是:"致命错误:在展开可选值时意外发现nil"它突出了"案例0"我的cellForItemAtIndexPath方法中的行。

我不想使用出列单元格的原因是我需要根据用户选择在运行时突出显示某些单元格,如果我使用出列单元格,它不会似乎保持滚动线下面的那些突出显示。

2 个答案:

答案 0 :(得分:0)

假设您的单元格同时包含.swift.xib文件,则需要像这样实例化NumbersCollectionViewCell: E.g。

let numbersCollectionViewCell = UINib(nibName: "NumbersCollectionViewCell", bundle: bundle).instantiateWithOwner(nil, options: nil)[0] as! NumbersCollectionViewCell

否则,您的IBOutlet将无法连接。

答案 1 :(得分:0)

>>> import sqlite3
>>> conn = sqlite3.connect("flaskr.db") # Replace this with the path to the flaskr.db in your working directory
>>> c = conn.cursor()
>>> c.execute("drop table if exists entries;")
<sqlite3.Cursor object at 0x0000000002C3BB90>
>>> c.execute("""create table entries (
... id integer primary key autoincrement,
... title text not null,
... text text not null
... );""")
<sqlite3.Cursor object at 0x0000000002C3BB90>
>>>