我有一个正常工作的tableView。内容已正确填充。我还在导航栏中有几个按钮来过滤tableView和reloadData的内容。一切都很好。
但是现在我试图拥有一个自定义的tableview标题,在那里有一些按钮。我创建了一个XIB文件并将其添加到tableview标题。
MainViewController.swft
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
var headerxib:UIView = NSBundle.mainBundle().loadNibNamed("headerView", owner: self, options: nil).first as UIView
var tableheader = UIView(frame: CGRectMake(0, 0, 300, 80))
tableHeader.addSubview(headerxib)
return tableHeader
}
// This is the function that I'm trying to run
func justReload(){
println("reload \(tableView)")
tableView.reloadData()
}
到目前为止,一切都很好。然后我在我的XIB swift文件中创建了IBAction,从主视图控制器(带有tableview的控制器)调用一个函数
headerView.xib
@IBAction func touhcbb(sender: AnyObject) {
let vc = MainViewController()
vc.justReload()
}
所以,这就是问题所在。 justReload()函数中的println()显示tableView为nil。在reloadData()中导致错误。
为什么从外部XIB文件调用该函数是否为零?
当我尝试从同一个ViewController中的IBOutlet调用该函数时,一切正常。
如果有人有任何暗示或线索指出我正确的方向,我感激不尽。谢谢!
答案 0 :(得分:1)
打开你的xib,并将文件所有者的类设置为MainViewController:
<强> MainViewContrtoller.swift 强>
class MainViewController: UITableViewController {
// Use IB to connect the button to this action method.
@IBAction func touhcbb(sender: AnyObject) {
justReload()
}
func justReload(){
println("reload \(tableView)")
tableView.reloadData()
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
var headerxib:UIView = NSBundle.mainBundle().loadNibNamed("headerView", owner: self, options: nil).first as UIView
var tableheader = UIView(frame: CGRectMake(0, 0, 300, 80))
tableHeader.addSubview(headerxib)
return tableHeader
}
}
答案 1 :(得分:0)
我设法找到了解决方法。
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
var headerxib: tableHeaderView = NSBundle.mainBundle().loadNibNamed("headerView", owner: self, options: nil).first as tableHeaderView
//Need this to send reference of MainViewController to the XIB's vc
headerxib.vc = self
var tableheader = UIView(frame: CGRectMake(0, 0, 300, 80))
tableHeader.addSubview(headerxib)
return tableHeader
}