我遇到了一个问题
我有一个 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
文件的接口(interface)
类名
为:NNVerticalStackTableViewCell
,单元格标识符
为: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
接口(interface)一起使用。
类似于 NNPropertiesUnderProjectTableViewCell
类,我有许多其他类使用与 NNVerticalStackTableViewCell.xib
相同的接口(interface)并相应地自定义它。
在我的 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
并且不想重复代码。
最佳答案
你可以,但是,不要使用 UITableViewCell
,而是使用类似的 UIView
为单元格内容 View 创建一个 xib,给它一个类(如 CellView
)。
在每个单元格类中,通过loadNibNamed
获取CellView
,并将其设置为单元格内容 View ,然后可以自由更改CellView
的属性并将其用作其他单元类的内容 View
也许有更好的解决方案,但对于外观相似的 UIViewController
,我就是这样做的,您也可以尝试在 Storyboard 中未设置类的 cell xib 并尝试加载它,看看错误是否仍然存在还是不是
关于ios - 为不同的 UITableViewCell 类创建单个 .xib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40501574/