2016-05-30 44 views
1

我想更新在UITabBar內的視圖控制器之間分割的UITableView。在視圖控制器中按下按鈕時,是否可以更新tableview的內容?我不想進入tableView繼續更新它。 tableview的邏輯與Array一起工作,所以我需要能夠從外部視圖控制器類更新它。從另一個視圖控制器中的UI按鈕更新UITableView

回答

1

是絕對的 - 只要你有到UITableView的一個參考,你可以簡單地調用:

tableView.reloadData() 

編輯

對不起,我誤解了問題。雖然上述內容仍然適用於多個視圖控制器,但Duncan C對於訪問其他視圖控制器的視圖是不好的做法是正確的。例如,假設我有一個類ViewController1和一個類TableViewController1。良好的做法會有如下內容:

class ViewController1: UIViewController { 

private var tableView: UITableView! 

    func reloadTableView() { 
     self.tableView.reloadData() 
    } 
} 



class ViewController2: UIViewController { 

    func doStuff() { 
     // some reference to instance of first view controller 
     let vc = ViewController1() 

     // Do something that requires table view to be reloaded 
     vc.reloadTableView() 
    } 
} 

希望這會有所幫助!

EDIT 2

我已經添加在什麼的實現將與喜歡的UITabBarController:

class MyTabBarController: UITabBarController { 

    var tableVC: MyTableViewController1? 
    var vc2: ViewController2? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.tableVC = self.storyboard?.instantiateViewControllerWithIdentifier("table vc storyboard id") as? MyTableViewController1 
     self.vc2 = self.storyboard?.instantiateViewControllerWithIdentifier("vc2 storyboard id") as? ViewController2 

     if let vc1 = self.tableVC, 
      let vc2 = self.vc2 { 

      self.viewControllers?.append(vc1) 
      self.viewControllers?.append(vc2) 
     } 

    } 

} 


class MyTableViewController1: UIViewController { 

    private var tableView: UITableView! 
    private var myArray: [AnyObject]! 

    func reloadTableView() { 
     self.tableView.reloadData() 
    } 

    func addToArray(anObject: AnyObject) { 
     self.myArray.append(anObject) 
    } 
} 


class ViewController2: UIViewController { 

    var vc2: MyTableViewController1? 

    func doStuff() { 

     // Do something that requires table view to be reloaded 
     vc2?.addToArray(someObject) 
     vc2?.reloadTableView() 
    } 

} 
+0

感謝您的快速響應。如何在swift中從另一個類獲得對UITableView的引用? – user3776662

+0

看到我編輯的答案 - 這有幫助嗎? – Jason

+0

是的,這絕對有幫助,唯一的問題是,當我嘗試引用第一個視圖控制器時,出現錯誤。 「讓vc = ViewController1()」Xcode對我大喊大叫,出於某種原因拋出一個錯誤。有任何想法嗎? – user3776662

2

你不應該試圖改變另一個視圖控制器的看法。這違反了封裝原則 - 面向對象編程的一個重要原則。

您應該添加另一個視圖控制器可以調用的方法。

確保用作表視圖模型的數組已更新,然後向其他視圖控制器發送消息,告訴它更新其表視圖。

包含表視圖的視圖控制器只會在它的表視圖上調用reloadData()作爲響應。

+0

這是一個好點! – Jason

相關問題