Tôi đang cố gắng tạo một ô xem bảng tùy chỉnh từ ngòi. Tôi đang đề cập đến bài viết này ở đây . Tôi đang đối mặt với hai vấn đề.
Tôi đã tạo một tệp .xib với một đối tượng UITableViewCell được kéo vào nó. Tôi đã tạo một lớp con UITableViewCell
và đặt nó làm lớp của ô và Ô làm định danh có thể sử dụng lại.
import UIKit
class CustomOneCell: UITableViewCell {
@IBOutlet weak var middleLabel: UILabel!
@IBOutlet weak var leftLabel: UILabel!
@IBOutlet weak var rightLabel: UILabel!
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
override init(style: UITableViewCellStyle, reuseIdentifier: String!) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
Trong UITableViewCont kiểm soát tôi có mã này,
import UIKit
class ViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {
var items = ["Item 1", "Item2", "Item3", "Item4"]
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - UITableViewDataSource
override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return items.count
}
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let identifier = "Cell"
var cell: CustomOneCell! = tableView.dequeueReusableCellWithIdentifier(identifier) as? CustomOneCell
if cell == nil {
tableView.registerNib(UINib(nibName: "CustomCellOne", bundle: nil), forCellReuseIdentifier: identifier)
cell = tableView.dequeueReusableCellWithIdentifier(identifier) as? CustomOneCell
}
return cell
}
}
Mã này tuân thủ không có lỗi nhưng khi tôi chạy nó trong trình giả lập, nó trông như thế này.
Trong UITableViewControll trong bảng phân cảnh, tôi chưa làm gì với ô. Mã định danh trống và không có lớp con. Tôi đã thử thêm các tế bào nhận diện để các tế bào nguyên mẫu và chạy nó một lần nữa nhưng tôi nhận được kết quả tương tự.
Một lỗi khác mà tôi gặp phải là, khi tôi cố gắng thực hiện phương thức sau trong UITableViewControll.
override func tableView(tableView: UITableView!, willDisplayCell cell: CustomOneCell!, forRowAtIndexPath indexPath: NSIndexPath!) {
cell.middleLabel.text = items[indexPath.row]
cell.leftLabel.text = items[indexPath.row]
cell.rightLabel.text = items[indexPath.row]
}
Như đã trình bày trong bài viết tôi đã đề cập tôi đã thay đổi cell
hình thức kiểu của tham số UITableViewCell
để CustomOneCell
đó là lớp con của tôi về UITableViewCell. Nhưng tôi nhận được lỗi sau,
Phương thức ghi đè với bộ chọn 'bảngView: willDisplayCell: forRowAtIndexPath:' có loại không tương thích '(UITableView!, CustomOneCell!, NSIndexPath!) -> ()'
Bất cứ ai có bất kỳ ý tưởng làm thế nào để giải quyết các lỗi này? Chúng dường như hoạt động tốt trong Objective-C.
Cảm ơn bạn.
EDIT: Tôi chỉ nhận thấy nếu tôi thay đổi hướng của trình giả lập thành ngang và biến nó trở lại thành chân dung, các ô sẽ xuất hiện! Tôi vẫn không thể hiểu chuyện gì đang xảy ra. Tôi đã tải lên một dự án Xcode ở đây để chứng minh vấn đề nếu bạn có thời gian để xem nhanh.