[swift] table view를 처음 써보고 남기는 글

[swift] table view basic

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으로 상태와 악세사리를 바꿔준다.

donaricano-btn

댓글

이 블로그의 인기 게시물

[IOS] AppDelegate는 뭐하는 녀석이지?

[git] git의 upstream과 origin 헷갈리는 사람 손!

[git] Github 이슈 라벨(issue labels)