我想使用Xib作为UITableViewCell的View。但我不确定我是否以正确的方式做到了(我不确定它是否会将细胞出列)
选项#1,我可以调用方法" test"
选项#1:
class MainMenuVC: UIViewController {
@IBOutlet weak var tableView: UITableView!
let nib = UINib(nibName: "MenuEntryRomaView", bundle: nil)
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.registerNib(nib, forCellReuseIdentifier: "cell") // Im guessing this line actually doesnt apply here...
}
@IBAction func test(sender: AnyObject) {
println("go!")
}
}
extension MainMenuVC: UITableViewDataSource {
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = nib.instantiateWithOwner(self, options: nil).first as MenuEntryView
cell.menuImageView.image = UIImage(named: "close_button")
cell.menuLabel.text = "Texto de menu"
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1000
}
}
但是我在这篇文章中找到了另一个解决方案: Assigning the outlet for a UITableViewCell using UINib 并且可以在我的例子中应用如下:
class MainMenuVC: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
let nib = UINib(nibName: "MenuEntryRomaView", bundle: nil)
self.tableView.registerNib(nib, forCellReuseIdentifier: "cell")
}
@IBAction func test(sender: AnyObject) {
println("go!")
}
}
extension MainMenuVC: UITableViewDataSource {
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("cell") as MenuEntryView
cell.menuImageView.image = UIImage(named: "close_button")
cell.menuLabel.text = "Texto de menu"
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1000
}
}
但是我没有在这个解决方案的任何地方设置所有者,当我调用方法"测试"从xib我得到一个错误。我试着做nib.instantiateWithOwner(self,options:nil) 在实例化nib UINib(nibName ..)但没有成功之后。请注意,我尝试了1k行的手机上的两个代码,并且我没有遇到任何类型的延迟(5s)。我的问题是:在#option 1中,它真正地将细胞出列?以及如何在选项2中将所有者设置为MainMenuVC以便能够从单元格中调用方法测试?
更新 这是我创建的示例项目的链接,我试图从单元格内的按钮调用VC中的方法。