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