从XIB调用函数时,tableView为nil

时间:2014-11-08 13:46:19

标签: ios uitableview swift xib

我有一个正常工作的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调用该函数时,一切正常。

如果有人有任何暗示或线索指出我正确的方向,我感激不尽。谢谢!

2 个答案:

答案 0 :(得分:1)

打开你的xib,并将文件所有者的类设置为MainViewController: enter image description here

<强> 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        
}