カテゴリー
iOS Swift

UITableViewを学ぶ

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")
  }	
}