UITableViewはポイントを抑えさえすればとても簡単です。
class ViewController: UIViewController {
// create an instance of UITableView in a lazy fashion
lazy var tableView: UITableView = {
let tableView = UITableView()
return tableView
}()
// custom class for delegate and datasources
let customClass = CustomClass.shared
override func viewDidLoad() {
super.viewDidLoad()
// set a background color so the view is visible
view.backgroundColor = .white
// add the tableView to the view
view.addSubview(tableView)
// set the frame of the tableView to view.bounds
tableView.frame = view.bounds
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "canBeAnythingUnique")
// you can extend ViewController as the delegate and datasouces, or you can create a class for it.
tableView.delegate = customClass
tableView.dataSource = customClass
}
}
// a custom class to handle datasources and delegate methods
class CustomClass: NSObject {
// make this class singleton
public static let shared = CustomClass()
private override init() {
super.init()
}
}
// extend the CustomClass as UITableViewDatasource
extension CustomClass: UITableViewDataSource {
// two required methods
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// in real world scenario, you would return the count of a data array
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
// a standard UITableViewCell has a textLabel as default
cell.textLabel?.text = "Hello World!!"
return cell
}
}
extension CustomClass: UITableViewDelegate {
// any delegation methods goes here...
}
カスタムセルを作る場合は、UITableViewCellをエクステンドします。
class CustomTableViewCell: UITableViewCell {
static let identifier = "CustomTableViewCell"
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
contentView.backgroundColor = .orange
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}