私は、セルで行ではなくセクションで、合計5個のセルを持つカスタムUITableViewを持っています。各セルにはボタンがあり、5番目のセルのボタン(tableButton)に残りのタイトルと異なるタイトルを付けるようにします。Swift:cellForRowAtIndexPathの予期しない結果
これは私が以下のコードで正常に動作しています。最初の4セルは当初、コードごとに正しいタイトルを持っています。しかし、私は5番目のセル(期待されるタイトルを持つ)をスクロールし、最初のセルまでスクロールバックすると、最初のセルが5番目のセルに固有のタイトルに変更されました。
if cell.tableButton.tag == 4条件にprint文を追加し、5番目のセルまでスクロールするたびに印刷されます。
import UIKit
class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 5
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomCell
cell.layer.borderWidth = 1
cell.layer.borderColor = UIColor.gray.cgColor
cell.tableButton.tag = indexPath.section
if indexPath.section == 4 {
cell.tableTitle.isHidden = true
cell.tableButton.setTitle("Special", for: .normal)
} else {
cell.tableButton.setTitle("Normal", for: .normal)
}
return cell
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let returnedView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: 15))
returnedView.backgroundColor = UIColor.groupTableViewBackground
return returnedView
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 15
}
}
CustomCell.swift:
import UIKit
class CustomCell: UITableViewCell {
@IBOutlet weak var tableButton: UIButton!
@IBOutlet weak var tableTitle: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
おそらく、セルの状態が変更されている可能性があります。すべての場合に '.normal'を' [] 'に置き換えてください – penatheboss
5つのセクションに5つのセルがありますか? – iAviator
各セクションが1つの5つのセクション、合計5つのセル。 –