먼저 질문에 대한 답변부터 시작하겠습니다.
모든 셀에 대해 고유 한 클래스를 코딩해야합니까? => 예, 그렇게 생각합니다. 적어도 나는 그렇게 할 것입니다.
하나의 tableviewController를 사용할 수 있습니까? => 예, 할 수 있습니다. 그러나 뷰 컨트롤러 내에 테이블 뷰를 가질 수도 있습니다.
다른 셀에 데이터를 어떻게 채울 수 있습니까? => 조건에 따라 다른 셀에 데이터를 채울 수 있습니다. 예를 들어 처음 두 행이 첫 번째 유형의 셀과 같기를 원한다고 가정합니다. 따라서 첫 번째 유형의 셀을 생성 / 재사용하고 데이터를 설정하기 만하면됩니다. 스크린 샷을 보여 주면 더 분명해질 것 같아요.
ViewController 내부의 TableView가있는 예제를 보여 드리겠습니다. 기본 개념을 이해하면 원하는대로 시도하고 수정할 수 있습니다.
1 단계 : 사용자 지정 TableViewCell 3 개를 만듭니다. 이름을 FirstCustomTableViewCell, SecondCustomTableViewCell, ThirdCustomTableViewCell로 지정했습니다. 더 의미있는 이름을 사용해야합니다.
2 단계 : Main.storyboard로 이동하여 View Controller 내부에 TableView를 끌어다 놓습니다. 이제 테이블보기를 선택하고 ID 검사기로 이동합니다. "Prototype Cells"를 3으로 설정합니다. 여기서 방금 TableView에 3 가지 종류의 셀이있을 수 있다고 말했습니다.
3 단계 : 이제 TableView와 ID 검사기에서 첫 번째 셀을 선택하고 Custom 클래스 필드에 "FirstCustomTableViewCell"을 입력 한 다음 속성 검사기에서 식별자를 "firstCustomCell"로 설정합니다.
다른 모든 사용자에 대해 동일한 작업을 수행합니다. 사용자 지정 클래스를 각각 "SecondCustomTableViewCell"및 "ThirdCustomTableViewCell"로 설정합니다. 또한 식별자를 secondCustomCell 및 thirdCustomCell로 연속적으로 설정합니다.
4 단계 : 사용자 지정 셀 클래스를 편집하고 필요에 따라 콘센트를 추가합니다. 귀하의 질문에 따라 편집했습니다.
PS : 클래스 정의 아래에 콘센트를 넣어야합니다.
따라서 FirstCustomTableViewCell.swift에서
class FirstCustomTableViewCell: UITableViewCell {
당신은 당신의 라벨과 이미지보기 콘센트를 넣을 것입니다.
@IBOutlet weak var myImageView: UIImageView!
@IBOutlet weak var myLabel: UILabel!
SecondCustomTableViewCell.swift에서 다음과 같이 두 개의 레이블을 추가하십시오.
import UIKit
class SecondCustomTableViewCell: UITableViewCell {
@IBOutlet weak var myLabel_1: UILabel!
@IBOutlet weak var myLabel_2: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
그리고 ThirdCustomTableViewCell.swift는 다음과 같이 보일 것입니다.
import UIKit
class ThirdCustomTableViewCell: UITableViewCell {
@IBOutlet weak var dayPicker: UIDatePicker!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
5 단계 : ViewController에서 TableView에 대한 Outlet을 만들고 스토리 보드에서 연결을 설정합니다. 또한 클래스 정의에 UITableViewDelegate 및 UITableViewDataSource를 프로토콜 목록으로 추가해야합니다. 따라서 클래스 정의는 다음과 같아야합니다.
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
그런 다음 테이블 뷰의 UITableViewDelegate 및 UITableViewDatasource를 컨트롤러에 연결하십시오. 이 시점에서 viewController.swift는 다음과 같이 보일 것입니다.
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
추신 : ViewController 내부에서 TableView가 아닌 TableViewController를 사용한다면이 단계를 건너 뛸 수 있습니다.
6 단계 : Cell 클래스에 따라 이미지 뷰와 레이블을 셀에 끌어다 놓습니다. 그런 다음 스토리 보드에서 콘센트에 대한 연결을 제공합니다.
7 단계 : 이제 뷰 컨트롤러에서 UITableViewDatasource의 필수 메서드를 작성합니다.
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "firstCustomCell")
//set the data here
return cell
}
else if indexPath.row == 1 {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "secondCustomCell")
//set the data here
return cell
}
else {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "thirdCustomCell")
//set the data here
return cell
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}