【Swift】UITableView의 Cell은 재사용됨에 따라 이야기
9654 단어 iOSUITableViewSwift프로그래밍Xcode
소개
이번에는 여러분도 사용한 적이 있을 UITableView의 이야기를 합니다.
UITableView의 셀은 메모리 관계로 재사용됩니다. 그러므로 생각한 대로의 거동이 되어 주지 않는 것이 자주 있습니다.
처음 10개의 셀의 배경을 적색으로 바꾸는 처리를 써 보았습니다만, 셀이 재이용되고 있기 때문에, 셀을 추가해 스크롤하면 백색의 셀의 확실성이 적색이 되어 버립니다.
이것의 대처법을 소개합니다.
구현
우선 셀의 배경을 붉게 하는 곳까지 씁니다.
ViewControllerfinal class ViewController: UIViewController {
@IBOutlet private weak var tableView: UITableView!
private var testModels = [String]()
override func viewDidLoad() {
super.viewDidLoad()
setData()
setupTableView()
}
private func setData() {
(1...20).forEach { i in
testModels.append("Test \(i)")
}
}
private func setupTableView() {
tableView.dataSource = self
tableView.register(CustomTableViewCell.nib,
forCellReuseIdentifier: CustomTableViewCell.identifier)
tableView.tableFooterView = UIView()
}
@IBAction private func addButtonDidTapped(_ sender: Any) {
testModels.append("Added Text")
tableView.reloadData()
}
}
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return testModels.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: CustomTableViewCell.identifier,
for: indexPath) as! CustomTableViewCell
let text = testModels[indexPath.row]
cell.configure(text: text)
if indexPath.row < 10 {
cell.backgroundColor = .red
}
return cell
}
}
CustomTableViewCellfinal class CustomTableViewCell: UITableViewCell {
static var identifier: String { String(describing: self) }
static var nib: UINib { UINib(nibName: String(describing: self), bundle: nil) }
@IBOutlet private weak var label: UILabel!
func configure(text: String) {
label.text = text
}
}
여기까지의 코드라면 방금전과 같은 거동이 되어 버립니다.
다음으로 커스텀 셀에 다음과 같이 작성해 보겠습니다.
CustomTableViewCell override func prepareForReuse() {
super.prepareForReuse()
backgroundColor = .white
}
prepareForReuse 은 재사용 가능한 셀을 준비할 때 호출됩니다. 이 타이밍에서 조금 거동이 이상했던 배경색을 흰색으로 합니다. 셀을 추가해도 처음 10개의 셀만 배경색이 빨간색인지 확인해 보세요.
결론
끝입니다.
Reference
이 문제에 관하여(【Swift】UITableView의 Cell은 재사용됨에 따라 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/REON/items/1ba1f27b9a047b26c461
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
우선 셀의 배경을 붉게 하는 곳까지 씁니다.
ViewController
final class ViewController: UIViewController {
@IBOutlet private weak var tableView: UITableView!
private var testModels = [String]()
override func viewDidLoad() {
super.viewDidLoad()
setData()
setupTableView()
}
private func setData() {
(1...20).forEach { i in
testModels.append("Test \(i)")
}
}
private func setupTableView() {
tableView.dataSource = self
tableView.register(CustomTableViewCell.nib,
forCellReuseIdentifier: CustomTableViewCell.identifier)
tableView.tableFooterView = UIView()
}
@IBAction private func addButtonDidTapped(_ sender: Any) {
testModels.append("Added Text")
tableView.reloadData()
}
}
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return testModels.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: CustomTableViewCell.identifier,
for: indexPath) as! CustomTableViewCell
let text = testModels[indexPath.row]
cell.configure(text: text)
if indexPath.row < 10 {
cell.backgroundColor = .red
}
return cell
}
}
CustomTableViewCell
final class CustomTableViewCell: UITableViewCell {
static var identifier: String { String(describing: self) }
static var nib: UINib { UINib(nibName: String(describing: self), bundle: nil) }
@IBOutlet private weak var label: UILabel!
func configure(text: String) {
label.text = text
}
}
여기까지의 코드라면 방금전과 같은 거동이 되어 버립니다.
다음으로 커스텀 셀에 다음과 같이 작성해 보겠습니다.
CustomTableViewCell
override func prepareForReuse() {
super.prepareForReuse()
backgroundColor = .white
}
prepareForReuse 은 재사용 가능한 셀을 준비할 때 호출됩니다. 이 타이밍에서 조금 거동이 이상했던 배경색을 흰색으로 합니다. 셀을 추가해도 처음 10개의 셀만 배경색이 빨간색인지 확인해 보세요.
결론
끝입니다.
Reference
이 문제에 관하여(【Swift】UITableView의 Cell은 재사용됨에 따라 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/REON/items/1ba1f27b9a047b26c461
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Swift】UITableView의 Cell은 재사용됨에 따라 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/REON/items/1ba1f27b9a047b26c461텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)