私は動的にUITableViewを作成し、それに配列を移入します。問題は、ディクショナリでいくつかの変更を加え、それに応じてArrayを再作成し、テーブルビューのデータをリロードすると、以前のセルのデータが残っていて、新しいデータが以前のものに上書きされることです。私は、メソッド呼び出しの順番を変更する、サブビューでviewWithTagを使う、スーパービューからサブビューを取り除くなど、多くの回避策を試しました。ほとんどの回答は古く、 "(cell == nil)私はその道を取っていないのですが。ここでは、コードです:UITableView reloadData()は以前のセルデータを上書きします
var sepetDict: [String: Int] = [:]
var sepetDictCopy = [String]()
override fun viewDidLoad() {
sepetTableView.frame = CGRectMake(0, 0, sepetDialogView.bounds.size.width, sepetDialogView.bounds.size.height)
sepetTableView.delegate = self
sepetTableView.dataSource = self
sepetTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "sepetCell")
}
func sepetClick() {
sepetDictCopy.removeAll()
sepetDictCopy = Array(sepetDict.keys)
sepetTableView.reloadData()
sepetTableView.removeFromSuperview()
self.view.addSubview(sepetDialogView)
sepetDialogView.addSubview(sepetTableView)
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let sepetCell = sepetTableView.dequeueReusableCellWithIdentifier("sepetCell", forIndexPath: indexPath)
let sepetNameLabel = UILabel()
sepetNameLabel.frame = CGRectMake(0, 0, sepetDialogView.bounds.size.width/2, 60)
sepetNameLabel.center = CGPointMake(25 + sepetDialogView.bounds.size.width/4 , 30)
sepetNameLabel.font = sepetNameLabel.font.fontWithSize(13)
sepetNameLabel.numberOfLines = 0
sepetNameLabel.textAlignment = NSTextAlignment.Left
sepetNameLabel.text = sepetDictCopy[indexPath.row]
sepetCell.contentView.addSubview(sepetNameLabel)
return sepetCell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sepetDictCopy.count
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 60
}
この場合、私はUIButtonをクリックして、それはUIViewのをポップアップするとのUITableViewはサブビューとして、このUIViewのに追加されます。最初のクリックで、すべてがうまくいきます。 UIViewを閉じてボタンを再度クリックすると、今回のテーブルビューには新しいデータ(正しいデータも)が読み込まれますが、以前のデータは上書きされます。提供されたコードでは、私は配列にデータを追加しないことを知っていますが、問題は同じです。たとえば、 "Pizza"がUILabelで書かれていて、テーブルをリロードしても "Pizza" (以前のラベルでラベルが上書きされていることがわかります)。 "Burger"を配列に追加し、 "Burger"と "Pizza"が表示されますが、今回の "Burger"はインデックス0の前の "Pizza"に書き込まれ、 "Pizza"はインデックス1だけに書き出されます。正しく理解できない場合は、追加情報や問題の写真を提供することもできます。
あなたはストーリーボード内のセルにラベルを追加し、カスタムクラスにリンクするか、 'viewWithTagを使用して、それをつかんでみました'(私はあなたがこの方法を使用して言及したことを知っていますが、私はあなたがそれをどのように使用しているかに関する文脈を持っていません)。おそらく、 'sepetNameLabel'にタグを設定し、新しいラベルを作成して追加する前にそれを取得しようとしているはずです。基本的に上記のコードでは、セルにすでにラベルがある場合でも、別のラベルを追加しています。それがあるかどうかチェックする必要があります(おそらく 'tag'プロパティを見て、最初のラベルを追加する前に' viewWithTag'をチェックする必要があります) – DMCApps
[UITableViewCell addSubview Repeating Object]の重複可能性(http://stackoverflow.com/questions/ 11702635/uitableviewcell-addsubview-repeating-object) –
いくつかのスクリーンショットを提供してもよろしいですか? – KSR