Я столкнулся с проблемойСоздание единого .xib для различных классов UITableViewCell
У меня есть NNVerticalStackTableViewCell.xib
файл и соответствующий NNVerticalStackTableViewCell.swift
файл.
Код для NNVerticalStackTableViewCell.swift
файла
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)
}
}
}
Интерфейс для NNVerticalStackTableViewCell.xib
файла
с class name
как: NNVerticalStackTableViewCell
и cell identifier
как: NNVerticalStackTableViewCell
Теперь я создал подкласс NNVerticalStackTableViewCell
как:
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)
}
}
Теперь то, что я хочу сделать, это использовать NNPropertiesUnderProjectTableViewCell
класс с NNVerticalStackTableViewCell.xib
интерфейсом.
Как и у NNPropertiesUnderProjectTableViewCell
класс У меня есть много других классов, которые используют тот же интерфейс, что и NNVerticalStackTableViewCell.xib
, и настройте его соответствующим образом.
В моей ViewController
, я зарегистрировал NNVerticalStackTableViewCell.xib
, а затем создать клетку, как:
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
}
Но я получаю исключение:
Could not cast value of type 'NNVerticalStackTableViewCell' (0x100945878) to 'NNPropertiesUnderProjectTableViewCell' (0x100949330).
Может кто-нибудь предложить, пожалуйста, как решить эту проблему. Я хочу использовать один .xib
и не хочу повторять код.
Можете ли вы показать пример нескольких классов, работающих с одним и тем же файлом xib? –