Как отобразить динамические данные API в ячейке табличного представления, если тип ответа не всегда одинаков - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть запрос API, в котором есть вопросы и ответы на них.Если вопрос, например, для 1., тогда ответ - кнопка, если вопрос - 2., тогда ответ - Переключатель. Если вопрос - 3.,.Rewponse это изображение.В зависимости от ответа мне нужно добавить либо кнопку, либо переключатель, либо изображение.

Данные API-интерфейса являются динамическими.

Я не знаю, как поступить!Я попытался добавить ячейку табличного представления, а затем в соответствии с ответом добавляю подпредставление для этой ячейки!Проблема в том, что вопросов много.Мое подпредставление повторно используется после прокрутки представления!

cell. textLable = Question[indexpath.row]
let responseType = Responses[indexPath.row]


if responseType == “button”{
cell.addSubview(buttonCell)
}

if responseType == “image”{
cell.addSubview(imageCell)
}

if responseType == “switch”{
cell.addSubview(swichCell)
}

Когда я прокручиваю tableView, мой subView добавляется везде, где ячейки используются повторно!

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

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

table.register(imageCell.self, forCellReuseIdentifier: "imageCell")
table.register(buttonCell.self, forCellReuseIdentifier: "buttonCell") 
table.register(switchCell.self, forCellReuseIdentifier: "switchCell")

Для этой цели вам необходимо создать подкласс UITableViewCell

Теперь, после регистрации ячеек, Вы можете использовать его в методе cellforrow следующим образом:

let responseType = Responses[indexPath.row]
var cellIdentifier = "buttonCell"
if (responseType == "image"){
   cellIdentifier = "imageCell"
}else if(responseType == "switch"){
   cellIdentifier = "switchCell"
}
let cell = dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)
0 голосов
/ 27 сентября 2019

Как вы заметили, "ячейки используются повторно!"

Это означает, что вы добавляете новый подпросмотр каждый раз, когда ячейка используется повторно ...вам нужно удалить то, что вы добавили ранее:

// call a func in your cell to "reset" it... remove any previously added subviews, etc
cell.reset()

cell. textLable = Question[indexpath.row]
let responseType = Responses[indexPath.row]


if responseType == “button”{
cell.addSubview(buttonCell)
}

if responseType == “image”{
cell.addSubview(imageCell)
}

if responseType == “switch”{
cell.addSubview(swichCell)
}

Вы также можете сделать это, внедрив prepareForReuse и "сбросив" содержимое ячейки там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...