Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> iOS

ความแตกต่างระหว่าง UITableViewController และ UIViewController

UIViewController และ UITableViewController ต่างกันที่หน้าที่และ Protocol ที่ Conform

UIViewController

  • Base Class สำหรับจัดการ View หนึ่งหน้าจอ
  • Life Cycle: viewDidLoad, viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear
  • ใช้เมื่อหน้าจอมีหลาย Component (ไม่ใช่แค่ Table)
  • ต้อง Conform UITableViewDataSource, UITableViewDelegate เองถ้ามี Table View

class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var headerView: UIView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.dataSource = self
        tableView.delegate = self
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { ... }
}

UITableViewController

  • Subclass ของ UIViewController ที่ มี Table View เป็น Root View แล้ว
  • Conform UITableViewDataSource, UITableViewDelegate อัตโนมัติ
  • Property tableView พร้อมใช้งาน
  • เหมาะสำหรับหน้าที่เป็น แค่ Table View อย่างเดียว
  • Auto-handle: Reload on appear, Clear selection, Flash scroll indicators

class MyTableViewController: UITableViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // tableView พร้อมใช้งานแล้ว
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 }
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { ... }
}

ตารางเปรียบเทียบ

คุณสมบัติUIViewControllerUITableViewController
Root ViewUIView (Custom)UITableView (Fixed)
DataSource/DelegateManual ConformAuto Conform
Flexibilityสูง (เพิ่ม View อื่นได้)ต่ำ (แค่ Table)
Refresh ControlManualBuilt-in refreshControl
Keyboard HandlingManualAuto (iOS 12+)
เหมาะสำหรับComplex ScreenList-only Screen

คำแนะนำ

  • หน้าจอมี Table + อื่นๆ (Header, Footer, Buttons) → UIViewController + UITableView
  • หน้าจอเป็นแค่ List/Table → UITableViewController (สะดวกกว่า)
  • Modern iOS: ใช้ UICollectionView + Compositional Layout แทน Table View บ่อยกว่า