각 Section을 선택하려면 어떻게 해야 하나요?

다음 그림을 보면 section 별로 data가 정렬이 되어 나온 것을 알 수 있습니다. 이때 UI 편의를 위해 각 section의 버튼을 클릭 함으로써 section의 row가 출력이 되거나 또는 안 되게 하고 싶은데 어떻게 해야할까요?
section의 row 개수 반환 함수는 다음과 같습니다.

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    //Return number of rows in section
    let charactor = Array(Set(self.initCharacter)).sorted()[section]
    //검색창이 비어있을 경우 section의 charactor과 이름의 첫글자가 일치하는 것만 리턴
    if self.searchBar.text?.isEmpty == true {
        return self.foodList.filter { splitText(text: $0) == charactor }.count
    }
  
    //검색창에 내용이 있는 경우 그 내용을 포함하는 이름들의 개수를 리턴
    return self.foodList.filter { splitText(text: $0) == charactor}.filter {                        $0.contains(self.searchBar.text!)}.count }
좋아요 1

문자 기반의 기본 헤더/푸터는 터치 이벤트를 다루는 기능이 없다보니 뷰 기반의 헤더/푸터를 이용해서 컨트롤을 추가해서 이벤트를 다룹니다.

UITableViewDelegate의 tableView(:viewForHeaderInSection:), tableView(:viewForFooterInSection:) 라는 메소드를 구현하면 테이블 뷰의 헤더/푸터 영역을 뷰로 구성할 수 있습니다.

대략적인 슈도코드는 다음과 같습니다.

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = UIView()
    let button = UIButton()
    headerView.addSubview(button)

    button.tag = section // 버튼 클릭시 섹션 구분을 위한 값
    button.addTarget(for: self, action: #handler(handleEvent), for: .touchUpInside)
    return headerView
}

@objc func handleEvent(sender: UIButton) {
    let section = sender.tag
    print("You touched \(section) section"
}

좋아요 3

@wannabewize 감사합니다 제가 원하던 내용이었습니다!!

좋아요 1