Tổ chức TableView một cách hiệu quả trong iOS

Tram Ho

Giới thiệu

TableView là một trong những component sử dụng phổ biến trong các ứng dụng iOS.
Trong bài viết này ta sẽ phân tích và từng bước để tổ chức Table View một cách hiệu quả để dễ dàng bảo trì và áp dụng được nhiều yêu cầu khác nhau về dữ liệu.

Giả sử ta cần xây dựng một TableView với nhiều kiểu cell khác nhau, giống như hình dưới đây:

Với yêu cầu như sau:

  • Dữ liệu hiển thị sẽ được lấy thông qua lời gọi API
  • Không hiển thị các section không có dữ liệu

Ta sẽ chọn mô hình MVVM cho ví dụ của bài viết này. Với MVVM ta sẽ dễ dàng tách biệt View và nghiệp vụ của bài toán.
Trong ví dụ này ta sẽ tạo một TableView với 3 kiểu cell khác nhau:

  1. Cell chỉ có label
  2. Cell gồm ảnh và label
  3. Cell có chức năng mở rộng

Bước 1: Tạo mới ViewController và Storyboard

Đầu tiên ta sẽ tạo một Storyboard cho dynamic TableView, và thêm TableView vào trong UIViewController.

Khi đó code của ViewController sẽ có dạng như sau:

Bước 2: Tạo protocol cho TableViewCell và TableViewCellModel

Ta sẽ tạo 2 protocol cho:

  1. Cho TableView cell
  2. Cho TableView cell ViewModel

Ta sẽ tạo protocol TableViewCellViewModelProtocol cho ViewCell model. Biến cellIdentifier sẽ được dùng để phân biệt giữa các loại cell.

Tiếp đó ta tạo protocol TableViewCellProtocol cho ViewCell. Protocol này có phương thức populate được dùng để lấy dữ liệu bên trong TableViewCell

Bước 3: Tạo TableViewCell và TableViewCellViewModel

Ta sẽ tiến hành tạo 3 TableView cell và hiển thị dữ liệu dựa trên ViewModel.

Loại 1: TableView cell chỉ có label

ViewModel sẽ có thuộc tính sau:

  • cellIdentifier
  • title

ViewCell sẽ có dạng như sau:

Loại 2: TableViewCell gồm ảnh và label

Trong cell sẽ gồm 1 ảnh và 1 label như hình dưới.

Cell model sẽ có dạng như sau:

Cell View sẽ có dạng như sau:

Loại 3: Cell có chức năng mở rộng

Cell model sẽ có dạng như sau:

Cell View sẽ có dạng như sau:

Bước 4: Tạo ViewModel cho UIViewController

ViewModel cho UIViewController sẽ gồm 2 chức năng chính:

  • Cập nhật dữ liệu cho TableView
  • Cập nhật dữ liệu cho một dòng

Ta sẽ sử dụng một mảng của đối tượng TableViewCellModelProtocol để lưu trữ nội dung và xử lý của từng dòng trong bảng

Khi đó dữ liệu trong bảng sẽ được khởi tạo như sau:

Bước 5: Kết hợp TableView delegate và DataSource

Bước này ta sẽ tiến hình khởi tạo Delegate và DataSource cho bảng.

Tiến đến ta sẽ viết các hàm thực thi cho các closure trong ViewModel đã được định nghĩa ở bước 4:

Cuối cùng ta sẽ thực thi các phương thức của UITableViewDelegateDataSource để trả về nội dung các cell mong muốn.

Khi đó table của chúng ta sẽ hoạt động như hình dưới đây

Nguồn tham khảo

https://medium.com/flawless-app-stories/clean-maintainable-and-flexible-tableview-implementation-217d6266926e

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo