2016-12-08 2 views
0

В настоящее время я использую представление таблицы для отображения меню, в котором люди могут нажимать на кнопки или subtract, чтобы увеличить/уменьшить их порядок.Сброс информации о ячейке таблицы при прокрутке

Этот вид таблицы имеет приблизительно 30 элементов, поэтому вам нужно прокрутить вниз, чтобы добраться до всех пунктов меню. Проблема в том, что при прокрутке вниз ячейки таблицы над прокруткой (которые теперь скрыты) теряют данные, которые они только что содержали.

Например, если у вас есть пункт меню, который вы заказали 2 предмета, то 2 на этикетке теперь обращается к 0. Это очень объектно ориентировано, поэтому я не уверен, почему это происходит.

Мой класс табличное:

@IBOutlet weak var appetizerTableView: UITableView! 


var appetizerList = [OrderModel]() 

let ref = FIRDatabase.database().reference() 

override func viewDidLoad() { 

    appetizerTableView.delegate = self 
    appetizerTableView.dataSource = self 


    ref.child("Broadway").child("AppetizerDishes").observeSingleEventOfType(.Value, withBlock: { snapshot in 
     if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] { 
      for snap in snapshot { 
       print("WILL: \(snap)") 
       if let postDict = snap.value as? Dictionary<String, AnyObject> { 
        let key = snap.key 
        let post = OrderModel(postkey: key, postData: postDict) 
        self.appetizerList.append(post) 
       } 
      } 
     } 

     self.appetizerTableView.reloadData() 
    }) 


} 

var data=[OrderModel]() 

func addButtonAction(addedList:[String:Float]) { 
    print("WILLCOHEN:\(addedList)") 
} 



func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return appetizerList.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let post = appetizerList[indexPath.row] 
    if let cell = appetizerTableView.dequeueReusableCellWithIdentifier("OrderCell") as? OrderCell{ 
     cell.configureCell(post) 
     cell.delegate = self 
     return cell 
    } else { 
     return OrderCell() 
    } 
    } 

} 

Моя модель клетки Класс:

class OrderModel { 
private var _dishName: String! 
private var _dishDescription: String! 
private var _numberOfOrders: Int! 
private var _postKey: String! 
private var _dishPrice: Float! 

var dishName: String { 
     return _dishName 
} 

var dishDescription: String { 
    return _dishDescription 
} 

var numberOfOrders: Int { 
    get { 
     return _numberOfOrders 
    } 
    set (newVal) { 
     _numberOfOrders = newVal 
    } 
} 

var postKey: String { 
    return _postKey 
} 

var dishPrice: Float { 
    return _dishPrice 
} 

init(dishName: String, dishDescription: String, numberOfOrders: Int) { 
    self._dishName = dishName 
    self._dishDescription = dishDescription 
} 

init(postkey: String, postData: Dictionary<String, AnyObject>) { 
    self._postKey = postkey 

    if let dishName = postData["dishName"] as? String { 
     self._dishName = dishName 
    } 

    if let dishDescription = postData["dishDescription"] as? String { 
     self._dishDescription = dishDescription 
    } 

    if let numberOfOrders = postData["anumberOfOrders"] as? Int { 
     self._numberOfOrders = numberOfOrders 
    } 

    if let dishPrice = postData["dishPrice"] as? Float32 { 
     self._dishPrice = dishPrice 
    } 

} 

} 

Мой класс клеток:

protocol ClassNameDelegate:class { 
func addButtonAction(addedList:[String:Float]) 
} 

    var addedList: [String:Float] = [:] 

class OrderCell: UITableViewCell { 

override func awakeFromNib() { 
    super.awakeFromNib() 

} 

var post: OrderModel! 
var link: Link! 




@IBOutlet weak var dishName: UILabel! 
@IBOutlet weak var dishDescriptionAndPrice: UILabel! 
@IBOutlet weak var numberOfOrders: UILabel! 
@IBOutlet weak var addOrderBtn: UIButton! 
@IBOutlet weak var subtractOderBtn: UIButton! 


weak var delegate: ClassNameDelegate? 

@IBAction func addButtonPressed(sender: AnyObject) { 
    if post.numberOfOrders == 9 { 
     numberOfOrders.text = "9" 
    } else { 
     if addedList[post.dishName] != nil { 
      addedList[post.dishName] = post.dishPrice 
     } else { 
      addedList["\(post.dishName) \(Int(numberOfOrders.text!)! + 1)"] = post.dishPrice 
     } 
     post.numberOfOrders = post.numberOfOrders - 1 
     numberOfOrders.text = "\(post.numberOfOrders)" 
    } 

    if delegate != nil { 
     delegate?.addButtonAction(addedList) 
    } 
} 

@IBAction func subtractButtonPressed(sender: AnyObject) { 
    if post.numberOfOrders == 0 { 
     numberOfOrders.text = "0" 
    } else { 
     post.numberOfOrders = post.numberOfOrders + 1 
     numberOfOrders.text = "\(post.numberOfOrders)" 
    } 
} 

func getOrders() -> Dictionary<String, Float> { 
    return addedList 
} 


func configureCell(post: OrderModel) { 
     self.post = post 
     self.dishName.text = post.dishName 
     self.dishDescriptionAndPrice.text = post.dishDescription 
     self.numberOfOrders.text = "0" 

} 

}

Я должен сказать, что я потянув взгляд на стол ta из Firebase.

Заранее благодарю за любую помощь или предложения, мы очень благодарны.

+0

self.appetizerTableView.reloadData() напишите эту строку в условии if. и проверьте свой результат. –

ответ

0

Вы звоните configureCell(post:) на каждую клетку, и в функции configureCell(post:) установить текстовое значение numbersOfOrders этикетки для "0". Вероятно, вы должны установить текст в значение в аргументе OrderModel/post.

Кроме того, вы должны быть уверены, что всегда вызывать configureCell(post:) (вы не называть его, если вам придется вручную создать OrderCell), так что ваша tableView(tableView:cellForRowAtIndexPath:) функция должна выглядеть следующим образом:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let post = appetizerList[indexPath.row] 
    let cell = appetizerTableView.dequeueReusableCellWithIdentifier("OrderCell") as? OrderCell ?? OrderCell() 

    cell.configureCell(post) 
    cell.delegate = self 

    return cell 
} 
Смежные вопросы