2015-11-17 5 views
0

У меня есть эта проблема, когда значения данных в моем прототипе динамического UITableViewCell сбрасываются при прокрутке вверх или вниз.UITableViewCell - сброс содержимого при прокрутке вверх или вниз

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

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    // Currency formatter 
    let formatter = NSNumberFormatter() 
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 
    formatter.locale = NSLocale(localeIdentifier: "el-GR") 

    // Table view cells are reused and should be dequeued using a cell identifier. 
    let cellIdentifier = "MenuItemTableViewCell" 

    var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! MenuItemTableViewCell 

    if cell.isEqual(nil) { 
     cell = UITableViewCell(style: .Default, reuseIdentifier: "MenuItemTableViewCell") as! MenuItemTableViewCell 
    } 

    // Match category (section) with items from data source 
    let itemsPerSection = items.filter({ $0.category == self.categories[indexPath.section] }) 
    let item = itemsPerSection[indexPath.row] 

    // cell data 
    cell.cellTitle.text = item.name + " " + formatter.stringFromNumber(item.price)! 
    cell.cellDescription.text = item.description 

Любая помощь пожалуйста?

С уважением, Polis

+0

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

+0

Да, сброс происходит, когда я прокручиваю вниз, а затем снова создаю резервную копию. например, у меня есть настраиваемый элемент управления шаговым механизмом с меткой, представляющей количество элемента меню (питание). я устанавливаю его на 2, прокручиваю вниз (так что ячейка не отображается), прокрутка назад снова, и это 0. У меня есть несколько разделов в моем представлении таблицы, поэтому я также реализую titleForHeaderInSection и numberOfRowsInSection. Ничего особенного. – Polis

+0

У меня была эта проблема раньше. Теперь я использую фреймворк с открытым исходным кодом Kingfisher, и он отлично работает. Кроме того, он поддерживает асинхронное изображение, которое сделает ваше приложение намного быстрее без какого-либо кода с вашей стороны. –

ответ

0

Каждый раз, когда клетка гаснет экран и снова клетка воссоздан. Поэтому, если вы измените ячейку (т. Е., Как вы описываете с помощью шага), вы должны сохранить это измененное значение, чтобы оно было создано с этим измененным значением в следующий раз, когда оно появится на экране.

+0

Не могли бы вы поделиться примером, пожалуйста? Когда/где я должен сохранить измененное значение (т. Е. Какой метод делегата) и как узнать, будет ли следующий раз, когда ячейка появится на экране, является новой или той же? Вот где моя путаница на самом деле. – Polis

+0

Каждый раз, когда ячейка уходит с экрана, когда она возвращается на экран, вы получите вызов 'tableView: cellForItemAtIndexPath:'. Это означает, что переменные, которые вы используете для установки значений ячейки в 'tableView: cellForItemAtIndexPath:', должны всегда быть актуальными. Вы должны обновлять их в ответ на пользователь, манипулирующий значением (т. Е. 'IBAction' шагового устройства, в случае, если вы описываете). –