[UIKit] TableView Handling Snippet

  • Sử dụng UITableView để hiển thị danh sách
  • Quản lý data source riêng biệt
  • Cần implement các protocol UITableViewDataSource và UITableViewDelegate
  • Xử lý việc chọn items trong bảng

Khai báo TableView outlet

// Khai báo TableView outlet
@IBOutlet weak var tableSound: UITableView!

Danh sách dữ liệu cho bảng

// Danh sách dữ liệu cho bảng
var soundNames: [String] = [
    "catch-my-breath-ambient-boy", 
    "goodnight-moon-sensho",
    "goodnight-sound", 
    "imple-mornings-lloom", 
    // ...các sound khác
]

Biến lưu trữ sound được chọn

// Biến lưu trữ sound được chọn
var selectedSound: String? = nil

Tạo extension để conform với UITableView protocol

extension VCSoundTable: UITableViewDataSource, UITableViewDelegate {
    
    // Khai báo số lượng phần tử muốn hiển thị trong bảng
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return sounds.count
    }
    
    // Truy cập và hiệu chỉnh nội dung của một cell cụ thể
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        
        // cell.textLabel?.text = sounds[indexPath.row] //predecated
        var content = cell.defaultContentConfiguration()
        content.text = sounds[indexPath.row]
        content.secondaryText = "Soundtrack"
        cell.contentConfiguration = content
        return cell
    }
    
    // Xử lý sự kiện chọn một cell trong bảng
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let cell = tableView.cellForRow(at: indexPath)
        
        // Cách cũ
        // let nextIndexPath =  IndexPath(row: indexPath.row + 1, section: 0)
        // let cell = tableView.cellForRow(at: nextIndexPath)
        
        // Cách mới
        let content = cell?.contentConfiguration as? UIListContentConfiguration
        selectedSound = content?.text ?? "no thing"
        print(selectedSound)

    }
}