Tôi đang phải đối mặt với một vấn đềTạo .xib duy nhất cho các lớp học khác nhau UITableViewCell
Tôi có một tập tin NNVerticalStackTableViewCell.xib
và tương ứng NNVerticalStackTableViewCell.swift
tệp của nó.
Mã cho NNVerticalStackTableViewCell.swift
tập tin
class NNVerticalStackTableViewCell: UITableViewCell
{
//MARK: Outlets
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var verticalStack: NNVerticalStackView!
//MARK: Internal Properties
var titleString : String?
{
set{
self.titleLabel.text = newValue
}
get{
return self.titleLabel.text
}
}
//MARK: View Lifecycle Methods
override func awakeFromNib()
{
super.awakeFromNib()
self.titleLabel.text = nil
}
//MARK: Internal Methods
func addViewsInVerticalStack(viewsArray : [UIView])
{
for view in viewsArray
{
self.verticalStack.insertStackItem(view)
}
}
}
Interface cho NNVerticalStackTableViewCell.xib
tập tin
với class name
như: NNVerticalStackTableViewCell
và cell identifier
như: NNVerticalStackTableViewCell
Bây giờ tôi đã tạo ra một lớp con của NNVerticalStackTableViewCell
như:
class NNPropertiesUnderProjectTableViewCell: NNVerticalStackTableViewCell
{
//MARK: Internal Properties
var completionHandler : ((NNSearchPreference) -> Void)?
//MARK: Internal Methods
func configureCell(_ propertiesUnderProjectArray : [[String : Any]])
{
var viewsArray = [UIView]()
for dict in propertiesUnderProjectArray
{
let elementView = NNPropertiesUnderProjectElementView.loadFromNib()
elementView?.configureViewWith(buttonTitleString: dict["displayString"] as! String, searchPreference: dict["searchPreference"] as! NNSearchPreference, completionHandler: {[weak self] (searchPreference) in
if let handler = self?.completionHandler
{
handler(searchPreference)
}
})
viewsArray.addObject(elementView)
}
self.addViewsInVerticalStack(viewsArray: viewsArray)
}
}
Bây giờ những gì tôi muốn làm là sử dụng NNPropertiesUnderProjectTableViewCell
lớp với giao diện NNVerticalStackTableViewCell.xib
.
Tương tự như NNPropertiesUnderProjectTableViewCell
lớp Tôi có nhiều lớp khác sử dụng cùng một giao diện như NNVerticalStackTableViewCell.xib
và tùy chỉnh nó cho phù hợp.
Trong ViewController
của tôi, tôi đã đăng ký NNVerticalStackTableViewCell.xib
và sau đó tạo ra các tế bào như:
self.tableView.register(UINib(nibName: "NNVerticalStackTableViewCell"), forCellReuseIdentifier: "NNVerticalStackTableViewCell")
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let propertiesUnderProjectCell = tableView.dequeueReusableCell(withIdentifier: "NNVerticalStackTableViewCell", for: indexPath as IndexPath) as! NNPropertiesUnderProjectTableViewCell
}
Nhưng, tôi nhận được ngoại lệ:
Could not cast value of type 'NNVerticalStackTableViewCell' (0x100945878) to 'NNPropertiesUnderProjectTableViewCell' (0x100949330).
bất cứ ai có thể vui lòng đề nghị làm thế nào để giải quyết vấn đề. Tôi muốn sử dụng duy nhất .xib
và không muốn lặp lại mã.
Bạn có thể, vui lòng hiển thị ví dụ về nhiều lớp làm việc với cùng một tệp xib? –