Можно ли сохранить пользовательский UITableViewCell в массиве? - PullRequest
0 голосов
/ 05 октября 2018

У меня много пользовательских ячеек, и я хотел упростить cellForRowAt, используя структуру и сохраняя информацию о ячейке в массиве.

struct HowToCells {
    let helpCell: UITableViewCell
    let identifier: String
    let icon: UIImage
    let cellName: String
}

var cellArray = [HowToCells]()

cellArray.append(HowToCells.init(helpCell: ScreenRecordingTableViewCell(), identifier: "ScreenRecordingTableViewCell", icon: HowToImage.screenRecording.image(), cellName: "Enable screen recording"))

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

     let c = cellArray[indexPath.row]
     let cellToUse = c.helpCell

     let cell = tableView.dequeueReusableCell(withIdentifier: c.identifier, for: indexPath) as! cellToUse

}

Я получаю следующую ошибку: Использованиенеобъявленный тип 'cellToUse'

ScreenRecordingTableViewCell - это пользовательский UITableViewCell

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Вам не нужно хранить ячейки табличного представления в массиве, потому что UITableView создает и сохраняет их самостоятельно.Просто используйте метод tableView.dequeueReusableCell(withIdentifier:for:) в tableView(_:cellForRowAt:), чтобы получить нужную ячейку.После этого вы можете настроить эту ячейку.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! CellClass
// Configure cell
return cell
}
0 голосов
/ 05 октября 2018

Вы получаете сообщение об ошибке в этой строке: пусть cell = tableView.dequeueReusableCell (withIdentifier: c.identifier, for: indexPath) as!cellToUse

, так как тип подкласса UITableViewCell должен использоваться после as !, а не имени переменной.х как!y просит принудительно привести приведение типа объекта X к типу Y.

При этом вы столкнетесь с проблемами хранения ячеек в массивах и использования tableView.dequeueReusableCell, который принимает существующую ячейку, удаляет ее из очереди и затемповторно использует это.Это повредит ваши данные.Вам нужно поместить все данные для ячеек в массив, а затем извлечь этот индекс из массива в cellForRow.

...