[swift] table view를 처음 써보고 남기는 글
TableView
Main.storyboard에서 Library(⌘ + ⇧ + L)를 열어서 Table view controller를 추가한다.
처음에 만들면, 진입 포인트가 없기 때문에 Attribute inspector에서 is initial view controller
를 체크해 최초 진입 포인트로 지정해준다.
table view cell은 만들어 놓고 재 사용할 수 있다. cell은 identifier를 이용해 식별 할 수 있다.
identifier에 이름을 줘보자.
이제 테이블을 구현해보자.
먼저 테이블의 줄 수를 정한다.
// 1000 줄짜리 테이블을 그려준다.
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1000
}
빈칸이 무수한 테이블이 생겼다. 이제 내용을 채워주자
// 테이블의 셀에 내용을 채워주지 않아 아무것도 그려지지 않는다.
// Attribute inspector의 Accessory에서 checkmark를 선택해준다.
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ChecklistItem", for: indexPath)
return cell
}
indexPath는 행을 식별하기 위한 식별자이다. [section,row]의 형태로 이루어져있다.
section은 table을 나누는 기준 중 하나이다. row는 의미 그대로 테이블의 행이다.
// 특정 조건을 줘서 출력해보자.
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ChecklistItem", for: indexPath)
if let label = cell.viewWithTag(1000) as? UILabel {
if indexPath.row % 5 == 0 {
label.text = "Take a jog"
} else if indexPath.row % 5 == 1{
label.text = "watch a movie"
}
}
return cell
}
Delegate
- UITableViewDataSource : 어떤 데이터들을 보여줄 것인가?
- UITableViewDelegate : 테이블이 어떻게 동작할 것인가?
테이블 뷰에서 취한 행동을 위해서는 Delegate를 선언해주고 위임해준다.
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let cell = tableView.cellForRow(at: indexPath){
if cell.accessoryType == .none {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
tableView.deselectRow(at: indexPath, animated: true)
}
}
행이 클릭되었을 때 none이면 checkmark로 다시 누르면 none으로 상태와 악세사리를 바꿔준다.
댓글
댓글 쓰기