레지스터
iOS 7 이후이 프로세스는 ( swift 3.0 ) 으로 단순화되었습니다 .
// For registering nib files
tableView.register(UINib(nibName: "MyCell", bundle: Bundle.main), forCellReuseIdentifier: "cell")
// For registering classes
tableView.register(MyCellClass.self, forCellReuseIdentifier: "cell")
( 주 ) 프로토 타입 셀로 .xib
또는 .stroyboard
파일에 셀을 만들어서 달성 할 수도 있습니다 . 클래스를 첨부 해야하는 경우 셀 프로토 타입을 선택하고 해당 클래스를 추가 할 수 있습니다 ( UITableViewCell
물론 의 자손이어야 함 ).
대기열에서 제외
그리고 나중에 ( swift 3.0 )을 사용하여 대기열에서 제외했습니다 .
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "Hello"
return cell
}
차이점은이 새로운 방법은 셀을 대기열에서 제외시킬뿐만 아니라 존재하지 않는 경우 (즉 if (cell == nil)
, shenanigans 를 수행 할 필요가 없음 ) 생성하며 셀은 위의 예와 같이 사용할 준비가 된 것입니다.
( 경고 ) tableView.dequeueReusableCell(withIdentifier:for:)
에는 새로운 동작이 있습니다. 다른 동작을 호출하면 ()없이 indexPath:
기존 동작을 확인할 nil
수 UITableViewCell?
있습니다.
if let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? MyCellClass
{
// Cell be casted properly
cell.myCustomProperty = true
}
else
{
// Wrong type? Wrong identifier?
}
물론 셀의 연관된 클래스 유형은 UITableViewCell
서브 클래스 의 .xib 파일에서 정의한 유형 이거나 다른 레지스터 메소드를 사용하여 정의 된 유형입니다 .
구성
이상적으로는 셀을 등록 할 때의 모양 및 내용 위치 (레이블 및 이미지보기 등)와 셀을 cellForRowAtIndexPath
채우는 방법 에 따라 셀이 이미 구성되어 있습니다.
모두 함께
class MyCell : UITableViewCell
{
// Can be either created manually, or loaded from a nib with prototypes
@IBOutlet weak var labelSomething : UILabel? = nil
}
class MasterViewController: UITableViewController
{
var data = ["Hello", "World", "Kinda", "Cliche", "Though"]
// Register
override func viewDidLoad()
{
super.viewDidLoad()
tableView.register(MyCell.self, forCellReuseIdentifier: "mycell")
// or the nib alternative
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return data.count
}
// Dequeue
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "mycell", for: indexPath) as! MyCell
cell.labelSomething?.text = data[indexPath.row]
return cell
}
}
물론 이것은 ObjC에서 모두 같은 이름으로 제공됩니다.