У меня есть 3 пользовательских ячейки, которые находятся в подклассе из viewController Uitableview, в котором они находятся. В ячейках есть распознаватель жестов, чтобы увидеть, где они были затронуты, чтобы изменить значки/фоны, тогда результат будет сохранен для основных данных. Я хочу, чтобы ситуация была сохранена, и ячейки сбрасываются на базовые цвета и графику, когда какая-либо ячейка не трогается в течение 3 секунд (чтобы удалить кнопку сохранения). У меня все сделано нормально, но я не могу сделать какой-либо метод для их сброса в одно и то же время. Я пробовал так много разных способов, и я думал, что лучший способ - перезагрузить таблицу в диспетчере представлений, но я не смог заставить ее работать. На данный момент я использую Struct с дубинкой. Когда касание заканчивается на любой ячейке, он вызывает таймер, и если он заканчивается без другого касания, он вызывает метод сохранения и сброса. Возможно, это неправильный способ сделать это, чтобы я немного застрял.Swift: одновременно перезагрузка нескольких подклассовых пользовательских uitableviewcells?
класс Посмотреть контроллер
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) ->
Int {
return measurements.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCellWithIdentifier("BmCustomCell", forIndexPath: indexPath) as! BmTableViewCell
return cell
} else if indexPath.row == 1 {
let cell = tableView.dequeueReusableCellWithIdentifier("StressCustomCell", forIndexPath: indexPath)as! StressTableViewCell
return cell
} else {
let cell = tableView.dequeueReusableCellWithIdentifier("PainCustomCell", forIndexPath: indexPath) as! PainTableViewCell
return cell
}
}
Пример класса painTableViewCell (такой же, как другие два)
// if touched the text changes and the icon changes. if not touched for 5 seconds resets to not touched.
func resetTouchedPainAfterFiveSecs(){
if TouchNotification.isBeingTouched == false {
timer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: Selector("reset"), userInfo: nil, repeats: false)
} else {
timer.invalidate()
}
}
func reset(){
ResetTables().resetAllTables()
savePainData()
}
// reset pain ui to ready to go state
func resetPain() {
TouchNotification.reset = true
if TouchNotification.reset == true {
painLabel.textColor = whiteColour
painIcon.image = UIImage(named: "IconPain 0 Unused")
touchedPain = false
painLabel.text = "Pain"
TouchNotification.reset = false
}
}
TouchNotification
struct TouchNotification {
static var isBeingTouched = false
static var reset = false
}
Сброс класса
class ResetTables: UIViewController {
func resetAllTables(){
StressTableViewCell().resetStress()
BmTableViewCell().resetBM()
PainTableViewCell().resetPain()
}
}
Ячейки меняют цвет и значок, основываясь на том, где вы их касаетесь. Чем больше справа, тем выше результат. Могу ли я сохранить этот расчет в пользовательских классах ячеек? – SashaZ
Вам необходимо обновить модель. Вы можете либо настроить некоторый делегат-протокол для ячейки, чтобы информировать контроллер вида, чтобы он мог соответствующим образом обновить модель, либо подключить жест жестки/розетки напрямую к контроллеру представления. Вы можете непосредственно обновить свой цвет ячеек (и отказаться от 'updateCellsAtIndexPaths', который я сделал в' didSelectRowAtIndexPath'), но вы все же хотите обновить модель в случае прокрутки ячейки, а затем назад, запуская «cellForRowAtIndexPath» снова называется. – Rob
Спасибо, завтра. – SashaZ