2016-07-05 3 views
-1

セルでアクションを実行しようとすると、8行目が繰り返し表示されます。UITableViewCellでセルの再利用を防ぐことができません:Swift

extension ExploreDetailViewController: UITableViewDataSource { 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return specificItemInfo.count 

} 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return specificItemInfo[section].subItemArray!.count 

} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("PriceCell", forIndexPath: indexPath) as! PriceTableViewCell 
     cell.configureCell1(specificItemInfo[indexPath.section].subItemArray![indexPath.row], specificItemInfo: specificItemInfo[(indexPath.section)]) 
     cell.delegate = self 
     return cell 
    } 

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell") as! ItemTableViewCell 
    cell.configureCell(specificItemInfo[section]) 
    return cell 
} 

セル内では、ラベルの値を設定するボタンを使用しています。しかし、1つのセルに設定された値は、8セル以下になります。それを防ぐ方法はありますか?セル内

+0

セルをロードするたびにラベルをリセットします。したがって、cell.configureCell1を呼び出す前にcell.yourlabel.text = ""にラベルをリセットする – Devster101

+0

セルサブクラスで '-prepareForReuse:'をオーバーライドしても同じ結果を得ることができます –

+0

@RichTolley - prepareForReuseはこのために使用すべきではありません。ここに公式のUITableViewのドキュメントからの引用があります。パフォーマンス上の理由から、アルファ、編集、選択状態など、コンテンツに関連しないセルの属性のみをリセットする必要があります。ここにリンクがあります - https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewCell_Class/#//apple_ref/occ/instm/UITableViewCell/prepareForReuse – itskoBits

答えて

1

、私はラベル

モデル - ビュー - コントローラの値を設定するボタンを使用しています!問題は、あなたが言うように、セルが別の行で再利用されていることです。この問題を解決するには、ボタンが使用されたときに新しいラベル値をモデルに格納し、次回のconfigureCell1が呼び出されるようにして、この行の正しい値をモデルから引き出します。 決しては何も格納するためにセル自体を使用していません!ただビューです。 モデルにのみ保管してください。

関連する問題