2015-04-08 58 views
0

我的tableView有IBOutlet,它的委託綁定到我的firstViewController。如何在swift中從另一個類獲取tableView的引用

我想從另一個ViewController正確訪問tableView。

例如,如果我想從另一個視圖控制器找出第0行的數量我做的:

let firstViewController = self.storyboard?.instantiateViewControllerWithIdentifier("firstViewController") as FirstViewController 

    println(firstViewController.tableView.numberOfRowsInSection(0)) 

但是當我運行的代碼 致命的錯誤,我得到一個錯誤:意外發現零,而解包一個可選值

+0

與NavigationController或TabBarController連接ViewControllers? –

+0

是的,它們與NavigationController連接 –

+0

你的tableView是否有一個數據源集? –

回答

3

如果你想從導航控制器上一個視圖控制器的屬性,那麼這個工程pervectly:

方法在導航控制器

func backViewController() -> UIViewController 
{ 
    var numberOfViewControllers = self.navigationController?.viewControllers.count 

    if numberOfViewControllers < 2 
    { 
     return UIViewController() 
    } 
    else 
    { 
     return self.navigationController!.viewControllers[numberOfViewControllers! - 2] as UIViewController 
    } 
} 

獲得前一個控制器如何使用它:

​​

或者在NavigationController第一的viewController:

let firstViewController = self.navigationController!.viewControllers.first as FirstViewController 
+0

非常感謝,我其實只是做了這個 'let firstViewController = self.navigationController!.viewControllers.first as FirstViewController' –

+0

更好:),我會添加這對於anwser;) –

0

我建議你使用數據源來獲取行數,而不是tableView。

+0

如果我想刷新數據或使用其他控制器插入的行進行動畫處理,該怎麼辦? –

+1

您可以使用NSNotificationCenter來執行此操作,只需將tableView與viewController訂閱到一個事件,然後在完成添加數據後從輔助控制器發佈此事件:https://developer.apple.com/library/ios/文檔/可可/參考/基礎/類/ NSNotificationCenter_Class/ –

0

是的,您可以創建一個確認爲UITableViewDataSource的類,然後創建一個實例並共享兩個視圖控制器的實例。

相關問題