自定义UITableViewCell中的UILabel无法在屏幕上呈现

时间:2014-11-11 21:28:30

标签: ios uitableview swift interface-builder

您好,感谢您的帮助。我有一个自定义的UITableViewCell,该类的控制器是用Swift编写的。在创建单元时调用所有init函数,但是在调试器中检查时,所有标签和我添加到内容视图的一个图像视图的帧都为0。

这是包含tableView:

的文件
class SearchesMainViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet var contentTableView: UITableView?
var tableViewData = SearchesMainTableViewData()

 required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

internal override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}

override func viewDidLoad(){
    super.viewDidLoad()
    self.navigationItem.title = "Search"

    var nib = UINib(nibName: "SingleSearchTableViewCell", bundle: nil)
    contentTableView?.registerNib(nib, forCellReuseIdentifier: SingleSearchTableViewCellController.reuseID())

}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return tableViewData.numberOfSectionsInTableView()
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return tableViewData.numberOfRowsInTableSection(section)
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
    var cell:SingleSearchTableViewCellController = tableView.dequeueReusableCellWithIdentifier(SingleSearchTableViewCellController.reuseID()) as SingleSearchTableViewCellController
    cell.formatCell()
    return cell
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 54.0
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    tableView.deselectRowAtIndexPath(indexPath, animated: false)
}

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return tableViewData.headerViewForSection(section)
}

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return tableViewData.heightForTableViewSectionHeaders()
}

func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return tableViewData.heightForTableViewSectionFooters()
}
}

这是单元格的控制器:

class SingleSearchTableViewCellController : UITableViewCell {

@IBOutlet var dateMonthLable : UILabel?
@IBOutlet var dateDayLable : UILabel?
@IBOutlet var yearLable : UILabel?
@IBOutlet var makeModelLable : UILabel?

var search : Search = Search()

class func reuseID() -> String{
    return "SingleSearchTableViewCell"
}

required init(coder aDecoder: NSCoder) {
    super.init()
}

override init(frame: CGRect) {
    super.init(frame: frame)
}

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
}

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

init(previousSearch s : Search){
    search = s
    super.init()
}

func formatCell(){
    formatDateMonthLable()
    formatDateDayLable()
    formatYearRangeLable()
    formatMakeModelLable()
}

private func formatDateMonthLable(){

}

private func formatDateDayLable(){

}

private func formatYearRangeLable(){

}

private func formatMakeModelLable(){

}
}

和界面构建器中包含所有绑定的tableview单元格的图像:

enter image description here

非常感谢任何sugestions或帮助,我是Swift和界面构建器的新手。祝你有愉快的一天:)

修改 什么是从这个代码实际构建的 enter image description here

它接口像我使用nibs的每个其他地方都有一个initWithNib或类似的东西,并且没有像tableview单元格那样的东西。我认为数据和视图的链接可能已关闭或缺失。

1 个答案:

答案 0 :(得分:1)

问题是您在单元类中的init覆盖。我对Swift并不熟悉,所以我不知道为什么那里的人除了打电话给super之外什么都不会导致你的子视图不显示。由于你没有在这些方法中做任何事情(或者也是awakeFromNib),你应​​该删除它们。我认为这将解决您的问题(在我的测试中确实如此)。