[IOS]Table View (업데이트 중)
Table View Cell
-
테이블 뷰 셀 구조
Edit/Content View/Accessory View로 구성 -
System Cell Styles
: Custom, Basic, Right detail, Left Detail, Subtitle
✅ Left Detail은 img 불가능 -
셀 검색 2가지 방법
- indexpath를 통해서 cell
- cell을 통해서 indexpath를 구하기: cell을 선택하면 연결된 view에
cell의 data를 전달 해야할때
//1번
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = list[indexPath.row]
cell.imageView?.image = UIImage(systemName: "star")
return cell
}
//2번
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let cell = sender as? UITableViewCell{
if let indexpath = listTableview.indexPath(for: cell){
if let vc = segue.destination as? DetailViewController{
vc.value = list[indexpath.row]
}
}
}
}
Custom Accessory View
- Custom Accessory View
Cocoa Touch Class
https://babbab2.tistory.com/51 - 셀 선택 이벤트와 Accessory Button 이벤트 비교
- Accessory Button 이벤트 처리
Self Sizing
: 높이를 미리 예측할 수 없을때 사용
- 셀 높이를 Automatic으로 설정.
버전11 부터 기본적으로 row height값은 Automatic으로 설정되어있다.
✅ Label의 line속성을 0으로 해야 label의 text가 길어도 클리핑 되지 않는다.
//코드로 설정
override func viewDidLoad() {
super.viewDidLoad()
listTableView.rowHeight = UITableViewAutomaticDimension
listTableView.estimatedRowHeight = UITableViewAutomaticDimension
}
- 스크롤 성능 향상시키는 방법
1. 모든 cell의 height가 같다면 미리 설정해두면 height를 계산할 필요가 없기 때문에 성능 향상
2. heightForRowAt와 estimatedHeightForRowAt같이 작성하면 성능 향상
3. UITableViewAutomaticDimension보가 row height의 평균값을 return하면 성능 향상
//indexpath 별로 설정해야 할때
extension SelfSizingCellViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 0{
return 100
}
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 0{
return 100
}
return UITableViewAutomaticDimension
}
}
Custom Cell
: Custom Cell은 다른 스타일과 다르게 제약을 직접 추가하고 Outlet을 직접 연결해야한다.
✅ label들을 viewController와 연결하면 몇번째 cell에 포함되어 있는 label에 접근해야하는지 알 수 없습니다. 그러므로,
- Custom Table View Cell을 위한 Class을 생성해서 Prototype Cell와 연결하고
- Custom Table View Cell Class에 Outlet 연결해야한다.
//TimeTableViewCell : custom cell class
class TimeTableViewCell: UITableViewCell {
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var locationLabel: UILabel!
@IBOutlet weak var ampmLabel: UILabel!
@IBOutlet weak var timeLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
-
Self-Sizing Cell에서 높이가 올바르게 계산되도록 제약 구성.
prototype Cell을 구성할때 설정한 높이는 runtime에서는 다른 값보다 우선순위가 낮습니다. Self Sizing이 활성화 되어있다면 자동으로 계산되고, 나머지 경우에는 tableView에 설정되어 있는 높이나 delegate가 리턴하는 높이로 표시됩니다.
✅ 그래서 원하는 높이로 계산되려면 label과 cell사이에 top과 bottom 제약을 설정해줘야한다 -
"반복적으로 사용할 수 있는" 테이블 뷰 셀을 구현해보자!
empty file에 prototype cell을 만들어두고 코드로 table view에 연결. 주로 ViewDidLoad에서 구현한다.
✅ 코드로 identifer를 설정할꺼기 때문에 storyboard에서 identifer는 공백으로 해둬야한다.
✅ 반복적으로 사용되는 cell에 수정사항이 있을때 편리하다.
override func viewDidLoad() {
super.viewDidLoad()
let cellnib = UINib(nibName: "SharedCustomCell", bundle: nil)
listTableview.register(cellnib, forCellReuseIdentifier: "SharedCustomCell")
}
Customizing Section
- Text Header/Footer
- 테이블 뷰 스타일에 따른 출력 방식 비교
- Custom Header 구현
- 재사용 메커니즘
- Header/Footer 높이 설정
Edit Mode
- Edit Control
- Reorder Control
- Swipe to Delete
- 셀 편집 모드 제어
- Batch Updates
Prefetching API
- 이미지 다운로드
- 스크롤 성능 향상
- 중복 다운로드 방지
- Pull to Refresh 구현
- Refresh Control 커스터마이징
Table View Controller & Static Cells
- UITableViewController 서브클래싱
- Dynamic Prototype과 Static Cells 비교
- 테이블 뷰에 고정된 데이터 표시
- Static Cells에서 Outlet 연결
Author And Source
이 문제에 관하여([IOS]Table View (업데이트 중)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ehddms7410/IOSTable-View저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)