목록 형태의 View 표시하는 컴포넌트.
세로 스크롤이 가능한 목록을 만들 수 있으며, 각 항목은 row로 표현된다.
import UIKit
class MyTableViewController: UIViewController {
@IBOutlet weak var myTableView: UITableView!
let friendsNames: [String] = ["Eunae", "Woong", "Jin", "Yeop"]
override func viewDidLoad() {
super.viewDidLoad()
myTableView.backgroundColor = .lightGray
myTableView.delegate = self
myTableView.dataSource = self
}
}
extension MyTableViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return friendsNames.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = myTableView.dequeueReusableCell(withIdentifier: "MyFirstCell", for: indexPath)
cell.textLabel?.text = friendsNames[indexPath.row]
return cell
}
}
viewDidLoad() 메서드를 오버라이딩하는 부분
tableView.dataSource = self: UITableView의 dataSource 프로퍼티를 현재 뷰 컨트롤러 인스턴스(self)로 설정. 이는 뷰 컨트롤러가 테이블 뷰의 데이터 소스 역할을 하도록 지정하는 것으로, 테이블 뷰에 표시될 데이터와 관련된 모든 요청을 처리하기 위해 필요하다.
tableView.delegate = self: 마찬가지로, UITableView의 delegate 프로퍼티를 현재 뷰 컨트롤러 인스턴스로 설정. 이는 뷰 컨트롤러가 테이블 뷰의 delegate 역할을 하도록 지정하는 것으로, 테이블 뷰의 행동과 관련된 사용자의 상호작용(예: 셀 선택, 행 높이 설정 등)을 처리하기 위해 필요하다.
위 코드들이 실행되기 위해서는 현재 뷰 콘트롤러 클래스가 UITableViewDelegate, UITableViewDataSource 프로토콜을 준수해야 한다. 따라서 이 코드에서도, MyTableViewController 클래스에 확장하여 이 두 가지 프로토콜을 추가한다.