반응형
UITableView의 사용법에 대해서 알아보겠습니다.
TavbleView를 @IBOulet으로 받아와주고 사용하면 되는데 TavbleView를 사용하는 뷰컨트롤러에
UITableViewDataSource와 UITableViewDataSource 프로토콜을 채택해 데이터를 다루고 셀을 조절할 수 있습니다.
프로토콜 채택은 다음 두가지 방법이 있습니다. (사실 똑같은 내용인데 가독성 차이가 있습니다.)
1. 뷰컨트롤러에 직접 상속
2. extention 이용
이것들을 사용하기 위해선 viewDidLoad()에 delegate 패턴을 사용한다고 알려줘야 합니다.
사용하는 방법의 요점은 다음과 같습니다.
이후 tableView의 cell을 적절히 조절해 사용합니다.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// dataSource delegate 패턴
self.tableView.dataSource = self
// dataSource를 사용할 때 delegate 패턴
self.tableView.delegate = self
}
}
extension ViewController: UITableViewDataSource {
// Row의 개수를 알려주는 함수 (필수)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.tasks.count
}
// 셀의 내용 정의 (필수)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// 재사용 가능한 테이블뷰 셀 반환
// withIdentifier는 재사용할 셀이다.
// withIdentifier은 사용할 셀의 고유값(임의 지정) for은 재사용할 indexPath
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath )
// cell의 내용을 지정후 반환
return cell
}
// 편집모드에서 삭제버튼을 눌렀을 때 어떻게 할 것인가를 알려주는 메서드
// 편집모드는 self.tableView.setEditing(true, animated: true)로 진입 가능하다.
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
}
// 행이 이동하면 원래 위치(sourceIndexPath)와 어디로(destinationIndexPath) 이동하는지 알려준다.
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
// 재정렬 될때 처리
}
}
extension ViewController: UITableViewDelegate {
// 셀이 선택이 되었을 때 어떻게 되는가
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// 선택된 행만 새로고침
// at에 배열을 넣어 여러개 새로고침도 가능하다.
self.tableView.reloadRows(at: [indexPath] , with: .automatic )
}
}
2022 02 15 추가
cell의 왼쪽과 오른쪽에 swipe 제스쳐 추가
공식 문서를 보고 만들었는데 아직 UIAcontextualAction의 handler 파라미터는 뭔지 잘 모르겠다.
// leading에 버튼 추가하기
override func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let action = UIContextualAction(style: .normal, title: "왼쪽 스와이프") { _, _, _ in
print("왼쪽 행 클릭!")
}
return UISwipeActionsConfiguration(actions: [action])
}
// trailing에 버튼 추가하기
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let action = UIContextualAction(style: .normal, title: "오른쪽 스와이프") { _, _, _ in
print("오른쪽 행 클릭!")
}
return UISwipeActionsConfiguration(actions: [action])
}
반응형
'iOS > UIKit' 카테고리의 다른 글
[IOS] Alert 창 다루기 (0) | 2022.02.03 |
---|---|
[IOS] UIBarButton 커스텀 (0) | 2022.02.03 |
[IOS] UIButton의 text를 가져와 사용하기 (0) | 2022.02.01 |
[IOS] @IBDesignable , @IBInspectable (0) | 2022.02.01 |
[IOS] 화면(ViewController)간 데이터 주고 받기 2 상위->하위 (0) | 2022.01.31 |