自定义TableViewCell |迅速

时间:2016-05-23 21:23:15

标签: ios swift uitableview cell tableviewcell

我正在尝试添加不同的内容,例如图片/文字。 我为这两种类型创建了2个自定义tableViewCells。我有主数组,它将全部保存(图像编码为base64,因为存储在JSON中)。

var content = [String]()
var imgCell: ImageTableViewCell = ImageTableViewCell()
var txtCell: TextTableViewCell = TextTableViewCell()

有两个按钮用于添加图像/文本。

@IBAction func textAddButton(sender: AnyObject) {
    self.content.append("text")
    self.articleTableView.reloadData()
}

在更新表时,我无法理解如何将数组数据与自定义单元格连接并显示它。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
    if content[indexPath.row] == "text" {
        return txtCell
    }
    else {
        return imgCell
    }
    return UITableViewCell()
}

这是自定义单元格。

class TextTableViewCell: UITableViewCell {

    @IBOutlet weak var textArticle: UITextView!

}

1 个答案:

答案 0 :(得分:1)

你永远不会像这样初始化细胞。在cellForRowAtIndexPath内,您拨打dequeueReusableCellWithIdentifier并根据indexPath相应地设置了相应的单元格。如果您已在Storyboard文件中创建了单元格,请确保在故事板中设置其标识符。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
    let cell = tableView. dequeueReusableCellWithIdentifier(identifierForIndexPath(indexPath), forIndexPath:indexPath)
    // set up cell accordingly
}

func identifierForIndexPath(indexPath:NSIndexPath) -> String {
    // for example: (you can set this up according to your needs)
    if (indexPath.row == 0) {
        return "ImageCell" // these must match your identifiers in your storyboard
    }
    return "TextCell"
}

或者,对于每种单元格类型,您可以在cellForRowAtIndexPath中使用单独的块,然后您可以使用以下内容:

let cell = tableView.dequeueReusableCellWithIdentifier("TextCell", forIndexPath:indexPath) as! TextTableViewCell