Я вернул проблему во всех направлениях и не могу найти правильный способ сделать то, что хочу.
Я объясняю вам проблему: мне нужно управлять 6 типами ячеек, которые имеют свой собственный дизайн. например у меня есть такое перечисление:
enum state {
case buy
case select
case go
case waiting
case work
case ended
}
У меня есть источник данных, который представляет собой массив данных, необходимых для построения ячейки. Этот массив всегда обновляется в моем коде, и я хочу, чтобы массив определял порядок и отображение ячейки в tableView.
Прежде чем использовать одну ячейку и отобразить нужный мне дизайн с switch
из state
в функции cellForRowAt
. Но проблема заключается в системе повторного использования, которая хранит в кэше мою старую ячейку, которую я заменил.
Проблема: в моем случае мне нужно иногда отображать 2 ячейки с состоянием [выбрать, купить] и после вставки ячейки [идти] в строке 1 -> [выбрать, пойти, купить] ... и после добавления 2 грести подобным образом [выбрать, пойти, пойти, закончить, купить]. Я надеюсь, что я не выразил себя слишком плохо.
Но когда я это сделаю, дизайн старой ячейки останется здесь.
Итак, мой вопрос: каков наилучший способ сделать это?
благодаря вашему ответу
РЕДАКТИРОВАТЬ : Это то, что я пробовал:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return user.lobbySurvey.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier:"Celll", for: indexPath) as! CardCell
for survey in user.lobbySurvey{
let index = user.lobbySurvey.index(where: {
//get the current index is nedeed else the cells reuse lazy
$0 === survey
})
if indexPath.row == index{
var surveyState : UserSurvey.state
surveyState = survey.stateSurvey
switch surveyState{
case .selectPicture:
cell.drawCard(statutOfCard: .selectPicture)
case .goSurvey:
cell.drawCard(statutOfCard: .goSurvey(picture: survey.picture))
case .surveyEnded:
print("survey Ended")
case .surveyWork:
print("survey in progress to vote")
case .surveyWaiting:
cell.drawCard(statutOfCard: .surveyWaiting(selfSurveyId: survey.id, timeLeft: survey.timeLeft, picture: survey.picture))
case .buyStack:
cell.drawCard(statutOfCard: .buyStack(bigView : self.view))
}
}
}
return cell
}
Моя функция drawcard - это переключатель, который перенаправляет функцию такого типа:
func drawGoSurvey(image: UIImage){
if(cardIsDraw == false){
widthOfCard = UIScreen.main.bounds.size.width - (widthMarginConstraint*2)
cardViewHeightCon.constant = widthOfCard!*ratioOfImage
goSurvey.draw(countUserSurvey: user.surveyCount, cardView: self.cardView, widthOfCard : widthOfCard!, userPicture: image)
goSurvey.delegate = self
self.addCardShadow()
cardIsDraw = true
}
}