Swift 3:设计表格视图单元格
问题描述:
我在界面生成器中使用自定义表格视图单元格时遇到了一些麻烦。Swift 3:设计表格视图单元格
有谁知道如何使@Designable
表视图细胞?
当我输入我的自定义表视图细胞与tableview中故事板,只有背景色工作。当我尝试在我的表视图单元格中设置标签的文本时,界面生成器崩溃。
我的设置是从以下方法叫:
- override public init(style: UITableViewCellStyle, reuseIdentifier: String?)
- required public init?(coder aDecoder: NSCoder)
我想这是因为我的标签是不是在这个时候初始化?
代码:
import UIKit
@IBDesignable class ProgressHeaderTableViewCell: UITableViewCell {
@IBOutlet weak var headerLabel: UILabel!
// MARK: - View methods
override public init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.setupNib()
}
// MARK: - NSCoding
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setupNib()
}
func setupNib(){
self.backgroundColor = UIColor.blue
// self.headerLabel.text = "Hello world"
}
}
更新代码:
import UIKit
@IBDesignable class CustomTableView: UITableViewCell {
@IBOutlet weak var headerLabel: UILabel!
// MARK: - View methods
override func prepareForInterfaceBuilder() {
self.awakeFromNib()
}
override public init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
//check that there are no current subviews
if self.subviews.count == 0 {
self.setupNib()
}
}
// MARK: - NSCoding
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//check that there are no current subviews
if self.subviews.count == 0 {
self.setupNib()
}
}
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = UIColor.blue
if headerLabel != nil {
self.headerLabel.text = "Hello world"
}
}
func setupNib(){
let bundle = Bundle(for: CustomTableView.self)
guard let customView = bundle.loadNibNamed("CustomTableView",owner: self, options: nil)?.first as? CustomTableView else {
return
}
customView.frame = self.bounds
self.addSubview(customView)
}
}
谢谢!
答
我认为有几个你可以看看这里可能出现的问题。首先,无论何时创建自定义视图,都需要将其与xib文件名相关联。
func setupNib(){
let bundle = Bundle(for: ProgressHeaderTableViewCell.self)
guard let customView = bundle.loadNibNamed("NAME_OF_XIB_FILE_GOES_HERE",owner: self, options: nil)?.first as? ProgressHeaderTableViewCell else {
return
}
customView.frame = self.bounds
self.addSubview(customView)
}
而且,每当我与厦门国际银行文件的工作,我做的awakeFromNib()
方法中的任何视图设置检查,以确保预期的因素之一是没有零后。
override func awakeFromNib() {
if headerLabel != nil {
self.backgroundColor = UIColor.blue
self.headerLabel.text = "Hello world"
}
}
最后,我只能够得到IBDesignables当我的支票,有没有电流子视图包住设置功能的工作:
override public init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
//check that there are no current subviews
if self.subviews.count == 0 {
self.setupNib()
{
}
// MARK: - NSCoding
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//check that there are no current subviews
if self.subviews.count == 0 {
self.setupNib()
{
}
PS当我学习这一点,我发现这篇博文很有帮助。您可能需要自己阅读以获得IBDesignable和自定义视图的处理。 http://supereasyapps.com/blog/2014/12/15/create-an-ibdesignable-uiview-subclass-with-code-from-an-xib-file-in-xcode-6
请添加tbaleView数据源方法。 – CodeChanger
添加数据源方法。我试图在我的可设计的UITableViewCell中设置标签,这意味着我的标签上有一个IBOutlet?不应该初始化吗? – PAK
你可以发布一些代码以获得更多的解释吗? – CodeChanger