2016-05-23 7 views
0

Я пытаюсь добавить в таблицу другой контент, такой как изображения/текст. Я создал 2 пользовательских tableViewCells для обоих типов. У меня есть основной массив, где все будет сохранено (изображения кодируются в base64 из-за хранения в JSON).Пользовательский TableViewCell | Swift

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 вы соответствующим образом настраиваете ячейку. Если вы создали ячейки в файле 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 
+0

есть какие-то причины, чтобы дать им идентификаторы, если я установить для каждой ячейки а класс ? –

+0

'UITableView' использует идентификаторы строк для идентификации ячеек (например, для повторного использования). Если вы хотите использовать 'UITableView', вы должны использовать его в соответствии с его API. – shim

+0

хорошо, но вопрос в том, как я могу подключать данные из массива и в зависимости от типа, использовать необходимый класс и отображать его в массиве? –

 Смежные вопросы

  • Нет связанных вопросов^_^