반응형
두가지 방법 : tag in attribute inspector , custom class
제어방법 1 : tag in attribute inspector
제어방법 2 : custom class
- 아울렛 변수를 뷰 컨트롤러에 직접 정의하면 셀 내부 객체들이 정적인 객체가 되므로 사용하는데에 문제가 생깁니다.
- 커스텀 클래스에 아울렛 변수를 정의하면 이는 동적으로 사용할 수 있는 형태의 객체가 되기 때문에 아울렛 변수를 통해 객체를 관리할 수 있습니다.
- 따라서 태그 속성 사용 시 단점으로 꼽히는 객체 관리 문제나 잘못된 태그값을 호출하는 문제로부터 자유로워질 수 있으며, 유지 보수도 무척 편리해집니다.
방법
- UITableViewCell 을 상속 받는 클래스 작성
- 스토리보드에서 프로토타입 셀의 Class 속성을 MovieCell 클래스로 지정
- MovieCell에 아울렛 변수 지정
- tableView.dequeueReusableCell(withIdentifier: "ListCell") as! StudentCell 구문으로 변경 (재사용 큐에서는 커스텀으로 만든 StudentwCell로 캐스팅)
관련 코드
ListViewController.swift
import Foundation
import UIKit
class ListViewController: UITableViewController {
var dataset = [
("철수", "201801", "감자반"),
("영희", "201802", "사과반"),
("복자", "201803", "포도반")
]
lazy var list: [StudentVO] = {
var datalist = [StudentVO]()
for (name, number, group) in self.dataset {
let svo = StudentVO()
svo.name = name
svo.number = number
svo.group = group
datalist.append(svo)
}
return datalist
}()
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.list.count
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 80
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// 1 by 1
let row = self.list[indexPath.row]
// Basic Cell 사용할 때
// let cell = tableView.dequeueReusableCell(withIdentifier: "ListCell")!
// cell.textLabel?.name = row.name
// cell.numberTextLabel?.text = row.number
// Custom Cell 사용할 때
// let name = cell.viewWithTag(101) as? UILabel
// let number = cell.viewWithTag(102) as? UILabel
// let group = cell.viewWithTag(103) as? UILabel
//
// name?.text = row.name
// number?.text = row.number
// group?.text = row.group
// return cell
// Custom Class 사용할 때
let cell = tableView.dequeueReusableCell(withIdentifier: "ListCell") as! StudentCell
cell.name.text = row.name
cell.number.text = row.number
cell.group.text = row.group
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("선택된 행은 \(indexPath.row)번째 행입니다.")
}
}
StudentVo.swift
import Foundation
class StudentVO {
var name: String?
var number: String?
var group: String?
}
StudentCell.swift
import UIKit
class StudentCell: UITableViewCell {
@IBOutlet weak var name: UILabel!
@IBOutlet weak var number: UILabel!
@IBOutlet weak var group: UILabel!
}
참고
반응형
'Swift' 카테고리의 다른 글
클래스 내에 멤버 변수를 사용할 때 초기화 시점에 따른 메모리 차지 (0) | 2018.11.11 |
---|---|
Swift 코드 작성시 변수와 함수 순서 (0) | 2018.11.04 |
이미지 사용 용도에 따른 UIImage 생성자 선택 (0) | 2018.11.04 |
Status Bar 색상 지정 (0) | 2018.11.04 |
@IBAction, 뷰끼리 값전달, 델리게이트, 최초 응답자 간단한 정보 (0) | 2018.11.04 |