我有一个包含自定义视图的UITableViewCell,自定义视图包含两个标签。分层视图喜欢:
|---Label 1
XIB---MyTableViewCell---MyView---|
|---Label 2
但运行应用程序,只显示'MyView',标签1和标签2不可见!如果我在viewDidLoad上编写代码,将“MyView”作为viewController.view的子视图,则会出现标签1和2。希望您能够帮助我。
答案 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
}
}
然后将其添加到自定义tableViewCell
:
自定义单元代码:
@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
}
你会得到这个:
这是你在找什么?
请原谅我提供swift
代码,但与objective-c
没什么不同!