我有一个使用自定义方法连接到xib 的UITableViewCell子类。NameInput``init
UITableViewCell
NameInput``init
class NameInput: UITableViewCell { class func make(label: String, placeholder: String) -> NameInput { let input = NSBundle.mainBundle().loadNibNamed("NameInput", owner: nil, options: nil)[0] as NameInput input.label.text = label input.valueField.placeholder = placeholder input.valueField.autocapitalizationType = .Words return input } }
有没有办法可以在viewDidLoad方法中初始化此单元格并仍然重用它?还是我必须使用重用标识符注册类本身?
viewDidLoad
惯用的NIB流程为:
override func viewDidLoad() { super.viewDidLoad() tableView.register(UINib(nibName: "NameInput", bundle: nil), forCellReuseIdentifier: "Cell")
}
在Swift 2中:
override func viewDidLoad() { super.viewDidLoad() tableView.registerNib(UINib(nibName: "NameInput", bundle: nil), forCellReuseIdentifier: "Cell") }
定义您的自定义单元格类:
import UIKit
class NameInput: UITableViewCell {
@IBOutlet weak var firstNameLabel: UILabel! @IBOutlet weak var lastNameLabel: UILabel!
在Interface Builder中创建一个NIB文件(具有在步骤1中引用的相同名称):
在NIB中指定表视图单元的基类以引用您的自定义单元类(在步骤2中定义)。
将NIB单元中控件之间的@IBOutlet引用与自定义单元类中的引用连接起来。
@IBOutlet
cellForRowAtIndexPath然后,您将实例化单元格并设置标签。在Swift 3中
cellForRowAtIndexPath
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! NameInput let person = people[indexPath.row] cell.firstNameLabel.text = person.firstName cell.lastNameLabel.text = person.lastName return cell
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! NameInput let person = people[indexPath.row] cell.firstNameLabel.text = person.firstName cell.lastNameLabel.text = person.lastName return cell }
从您的示例中不能完全确定您在单元格上放置了哪些控件,但是上面有两个UILabel控件。连接@IBOutlet对您的应用有意义的所有引用。
UILabel