重用UITableViewCell时如何初始化UI东西

时间:2019-04-28 15:31:57

标签: ios swift uitableview

我想在应用中重用UITableViewCell,但出现此错误:意外地发现nil,同时隐式展开了Optional值。

我发现这是因为UITableViewCell中的UI内容为零,所以我的应用程序崩溃了。

我的UITableViewCell代码如下:

class WordListCell: UITableViewCell {

    @IBOutlet weak var wordListCoverImage: UIImageView!
    @IBOutlet weak var wordListName: UILabel!
    @IBOutlet weak var wordListInfo: UILabel!

    var wordList: WordList? {
        didSet {
            updateUI()
        }
    }

    private func updateUI() {
        wordListName.text = wordList?.name
        wordListInfo.text = wordList?.description
        wordListCoverImage = UIImage()
    }
}

我在storyboard中创建它,并将outlet链接到另一个TableView中的代码。

但是这一次,我想在新的TableView中重用该单元格,该单元格全部是由代码创建的,所以我不知道如何初始化UI内容。

新的UITableView代码如下:

tableView.delegate = self
tableView.dataSource = self
tableView.register(WordListCell.self, forCellReuseIdentifier: "wordListCell")

//the delegate
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return wordLists.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let wordList = wordLists[indexPath.row]

    let cell = tableView.dequeueReusableCell(withIdentifier: "wordListCell", for: indexPath)
    if let wordListCell = cell as? WordListCell {
        wordListCell.wordList = wordList
    }

    return cell
}

请告诉我如何重复使用单元格。谢谢!

1 个答案:

答案 0 :(得分:1)

好的,所以我认为您做的是在创建自定义tableView单元格时未分配UIImage。因此,请尝试执行此wordListCoverImage = UIImage(named: wordList.imageName)

除了添加

之外,现在还可以在viewDidLoad()内的tableView类中使用
tableView.delegate = self
tableView.dataSource = self
tableView.register(WordListCell.self, forCellReuseIdentifier: "wordListCell")

然后在let cell = tableView.dequeueReusableCell(withIdentifier: "wordListCell", for: indexPath)下将其向下转换为自定义单元格类,就像这样。

let cell = tableView.dequeueReusableCell(withIdentifier: "wordListCell", for: indexPath) as! WordListCell

然后在该设置下最终cell.delegate = self

我希望这会有所帮助!