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 { ... }
}
ตารางเปรียบเทียบ
| คุณสมบัติ | UIViewController | UITableViewController |
|---|---|---|
| Root View | UIView (Custom) | UITableView (Fixed) |
| DataSource/Delegate | Manual Conform | Auto Conform |
| Flexibility | สูง (เพิ่ม View อื่นได้) | ต่ำ (แค่ Table) |
| Refresh Control | Manual | Built-in refreshControl |
| Keyboard Handling | Manual | Auto (iOS 12+) |
| เหมาะสำหรับ | Complex Screen | List-only Screen |
คำแนะนำ
- หน้าจอมี Table + อื่นๆ (Header, Footer, Buttons) → UIViewController + UITableView
- หน้าจอเป็นแค่ List/Table → UITableViewController (สะดวกกว่า)
- Modern iOS: ใช้ UICollectionView + Compositional Layout แทน Table View บ่อยกว่า