使用nib的objc自定义视图在tableviewcell上不可见

时间:2016-08-03 15:07:19

标签: ios objective-c

我有一个包含自定义视图的UITableViewCell,自定义视图包含两个标签。分层视图喜欢: |---Label 1 XIB---MyTableViewCell---MyView---| |---Label 2

但运行应用程序,只显示'MyView',标签1和标签2不可见!如果我在viewDidLoad上编写代码,将“MyView”作为viewController.view的子视图,则会出现标签1和2。希望您能够帮助我。 enter image description here

1 个答案:

答案 0 :(得分:0)

你试过这个吗?

像这样创建MyView

class MyView: UIView {

@IBOutlet weak var _label1: UILabel!
@IBOutlet weak var _label2: UILabel!

// Our custom view from the XIB file
var view: UIView!

//MARK: - Setup -
private func xibSetup() {
    view = loadViewFromNib()
    view.frame = bounds
    // Make the view stretch with containing view
    view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
    addSubview(view)
}

private func loadViewFromNib() -> UIView {

    let bundle = NSBundle(forClass: self.dynamicType)
    let nib = UINib(nibName: "MyView", bundle: bundle)
    let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView

    return view
}

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

override func awakeFromNib() {
    super.awakeFromNib()

}

func setLabeles(lbl1: String, lbl2: String) {
    _label1!.text = lbl1
    _label2!.text = lbl2
}
}

enter image description hereLabel1Label2出口分别设为。

然后将其添加到自定义tableViewCell

enter image description here (粉红色用于突出显示!) 点My View出口。

自定义单元代码:

@IBOutlet weak var _myView: MyView!

class func identifier() -> String {
    return "CustomTableViewCellId"
}

class func nib() -> UINib {
    let nib = UINib(nibName: "CustomTableViewCell", bundle: NSBundle.mainBundle())
    return nib
}

//MARK: Public Methods
func setCellIndexLabel(index: Int) {
    _myView!.setLabeles("lbl1: \(index)", lbl2: "lbl2: \(index)")
}

然后在表视图中不需要做任何额外的事情,只需这样做: 在viewDidLoad() -

tableView!.registerNib(CustomTableViewCell.nib(), forCellReuseIdentifier: CustomTableViewCell.identifier())
//then
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    // Configure the cell...
    let cell = tableView.dequeueReusableCellWithIdentifier(CustomTableViewCell.identifier(), forIndexPath: indexPath) as! CustomTableViewCell
    cell.setCellIndexLabel(indexPath.row)

    return cell
}

你会得到这个:

enter image description here

这是你在找什么?

请原谅我提供swift代码,但与objective-c没什么不同!