Пользовательский 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 ответ

Решение

Вы никогда не инициализируете такие клетки. внутри cellForRowAtIndexPath ты звонишь dequeueReusableCellWithIdentifier и в зависимости от indexPath Вы настраиваете ячейку соответственно. Если вы создали ячейки в файле раскадровки, обязательно установите их идентификаторы в раскадровке.

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
Другие вопросы по тегам