Hãy để tôi bắt đầu với việc trả lời các câu hỏi của bạn trước.
Tôi có phải viết mã một lớp riêng cho mỗi ô không? => Vâng, tôi tin là như vậy. Ít nhất, tôi sẽ làm theo cách đó.
Tôi có thể sử dụng một tableviewController không? => Có, bạn có thể. Tuy nhiên, bạn cũng có thể có dạng xem bảng bên trong Bộ điều khiển dạng xem của mình.
Làm cách nào để điền dữ liệu vào các ô khác nhau? => Tùy theo điều kiện mà bạn có thể điền dữ liệu vào các ô khác nhau. Ví dụ: giả sử rằng bạn muốn hai hàng đầu tiên của mình giống như loại ô đầu tiên. Vì vậy, bạn chỉ cần tạo / sử dụng lại loại ô đầu tiên và thiết lập dữ liệu của nó. Nó sẽ rõ ràng hơn, khi tôi cho bạn xem ảnh chụp màn hình, tôi đoán vậy.
Hãy để tôi cung cấp cho bạn một ví dụ với TableView bên trong ViewController. Khi bạn hiểu khái niệm chính, bạn có thể thử và sửa đổi theo cách nào bạn muốn.
Bước 1: Tạo 3 TableViewCell tùy chỉnh. Tôi đặt tên nó là FirstCustomTableViewCell, SecondCustomTableViewCell, ThirdCustomTableViewCell. Bạn nên sử dụng những cái tên có ý nghĩa hơn.
Bước 2: Truy cập Main.storyboard và kéo và thả TableView bên trong View Controller của bạn. Bây giờ, chọn chế độ xem bảng và đi tới trình kiểm tra danh tính. Đặt "Các ô nguyên mẫu" thành 3. Ở đây, bạn vừa nói với TableView của mình rằng bạn có thể có 3 loại ô khác nhau.
Bước 3: Bây giờ, chọn ô đầu tiên trong TableView của bạn và trong trình kiểm tra danh tính, hãy đặt "FirstCustomTableViewCell" vào trường lớp Tùy chỉnh và sau đó đặt định danh là "firstCustomCell" trong trình kiểm tra thuộc tính.
Làm tương tự cho tất cả những người khác - Đặt các Lớp tùy chỉnh của họ tương ứng là "SecondCustomTableViewCell" và "ThirdCustomTableViewCell". Đồng thời đặt các số nhận dạng là secondCustomCell và thirdCustomCell liên tiếp.
Bước 4: Chỉnh sửa Lớp ô tùy chỉnh và thêm cửa hàng theo nhu cầu của bạn. Tôi đã chỉnh sửa nó dựa trên câu hỏi của bạn.
Tái bút: Bạn cần đặt các cửa hàng dưới định nghĩa lớp.
Vì vậy, trong FirstCustomTableViewCell.swift, bên dưới
class FirstCustomTableViewCell: UITableViewCell {
bạn sẽ đặt nhãn và cửa hàng xem hình ảnh của bạn.
@IBOutlet weak var myImageView: UIImageView!
@IBOutlet weak var myLabel: UILabel!
và trong SecondCustomTableViewCell.swift, hãy thêm hai nhãn như-
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)
}
}
và ThirdCustomTableViewCell.swift sẽ giống như-
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)
}
}
Bước 5: Trong ViewController của bạn, tạo Outlet cho TableView của bạn và thiết lập kết nối từ bảng phân cảnh. Ngoài ra, bạn cần thêm UITableViewDelegate và UITableViewDataSource trong định nghĩa lớp làm danh sách giao thức. Vì vậy, định nghĩa lớp của bạn sẽ giống như-
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
Sau đó, đính kèm UITableViewDelegate và UITableViewDatasource của chế độ xem bảng vào bộ điều khiển của bạn. Tại thời điểm này, viewController.swift của bạn sẽ giống như-
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Tái bút: Nếu bạn đang sử dụng TableViewController thay vì TableView bên trong ViewController, bạn có thể đã bỏ qua bước này.
Bước 6: Kéo và thả các chế độ xem hình ảnh và nhãn trong ô của bạn theo lớp Ô. và sau đó cung cấp kết nối với các cửa hàng của họ từ bảng phân cảnh.
Bước 7: Bây giờ, viết các phương thức cần thiết của UITableViewDatasource trong bộ điều khiển chế độ xem.
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()
}
}