Swift 개발을 하면서 tableView 를 만드는 상황은 아마 매번 있지 않을까 싶습니다.
아직 초보자인 저로써는 UITableView를 만들면서 크나큰 난관에 봉착하였는데...
그건 바로 테이블 뷰의 크기를 미리 정해놓고 그 안에 값을 하나하나 추가하는 기능을 구현하는 과정에서 있었습니다.
제가 원한거는 10개의 테이블 row에서 현재 배열에 들어있는 값 하나만을 출력하고 싶었으나 .
안보이는 부분의 스크롤을 내리는 순간 그 밑에도 한개가 추가되고 계속 오르락 내리락 하면서 맨 윗칸 혹은 아랫칸에 정보가 씌여진다는 것 입니다.
이와 같이 row index 가 0 일때만 text 값을 입력해 주었는데 안보이는 tableview가 보이면서 데이터가 reload 되기 때문입니다 .
제가 이렇게 작성을 하면 위와 같이 출력이 됩니다.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// 해당 섹션에 몇개의 row가 있어야 하는지 반환
let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier, for: indexPath)
//appDelegate.codeList는 AppDelegate에 있는 넣을 Value의 배열
if appDelegate.codeList.count == 0 {
return cell
}
if indexPath.section == 0 {
if indexPath.row < appDelegate.codeList.count {
cell.textLabel?.text = appDelegate.codeList[indexPath.row]
cell.textLabel?.textAlignment = .center
cell.textLabel?.textColor = .black
}
}
return cell
}
저도 처음에는 이부분이 문제일거라고는 생각하지 못했습니다.
검색해보니 CellForRowAt이 스크롤로 화면이 바뀔때마다 Reload되는데 거기서 보여지는 화면의 최상단의 값이 바뀌고 있으니 전체 TableView에서 균열이 발생하는 것 이었습니다.
예를 들어서 아스날FC가 "더 보기"리그 1위를 달리고 있다. 뭐 이런 느낌일까요...?
해결 방법은 바로 지속적인 초기화 입니다.
아래와 같이 "" 빈 String으로 CellForRowAt이 불리울때마다 해당되지 않는 값에 "" 라는 빈 값을 넣어주면 깨끗하게 원하는 TableView가 완성 됩니다.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// 해당 섹션에 몇개의 row가 있어야 하는지 반환
let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier, for: indexPath)
var cellText : String = ""
if appDelegate.codeList.count == 0 {
return cell
}
if indexPath.section == 0 {
if indexPath.row < appDelegate.codeList.count {
cellText = appDelegate.codeList[indexPath.row]
cell.textLabel?.textAlignment = .center
cell.textLabel?.textColor = .black
}
}
cell.textLabel?.text = cellText
return cell
}
'프로그래밍 > IOS (Swift)' 카테고리의 다른 글
[Swift] 기종별 해상도 맞추는 View resize ( Constraint 주지 않고 ) (0) | 2021.04.29 |
---|---|
[Swift] Argument Label 함수 Parameter 중간에 이름이? (0) | 2021.04.21 |
[Swift] TextField, PickerView 가 있는 Alert 창 만들기 (0) | 2021.04.13 |
[Swift] NavigationController 사용시 코드로 Navigation Item 수정하기 & Swift 기본 이미지 사용하기(System Image) (0) | 2021.04.01 |
[Swift] Cocoapods 이용하여 MAlert 라이브러리 사용하기 (0) | 2021.03.29 |