我想更新在UITabBar內的視圖控制器之間分割的UITableView。在視圖控制器中按下按鈕時,是否可以更新tableview的內容?我不想進入tableView繼續更新它。 tableview的邏輯與Array一起工作,所以我需要能夠從外部視圖控制器類更新它。從另一個視圖控制器中的UI按鈕更新UITableView
1
A
回答
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()
}
}
2
你不應該試圖改變另一個視圖控制器的看法。這違反了封裝原則 - 面向對象編程的一個重要原則。
您應該添加另一個視圖控制器可以調用的方法。
確保用作表視圖模型的數組已更新,然後向其他視圖控制器發送消息,告訴它更新其表視圖。
包含表視圖的視圖控制器只會在它的表視圖上調用reloadData()
作爲響應。
+0
這是一個好點! – Jason
相關問題
- 1. 從另一個控制器更新UI
- 2. 從xcode中的另一個視圖控制器禁用按鈕
- 3. 從appDelegate更新另一個視圖控制器中的標籤
- 4. 加載一個外部視圖控制器,從一個按鈕點擊另一個視圖控制器
- 5. 另一個視圖控制器中的Swift隱藏按鈕
- 6. 從另一個視圖控制器關閉視圖控制器
- 7. 從另一個視圖控制器通知視圖控制器
- 8. 從一個視圖控制器移動到另一個視圖控制器沒有按鈕
- 9. 使用按鈕從一個視圖控制器轉換到另一個視圖控制器
- 10. 如何通過按鈕從一個視圖控制器推到另一個視圖控制器?
- 11. 更新從另一個視圖控制器
- 12. 如何從另一個視圖控制器更新UIButton標籤
- 13. 從另一個視圖控制器更新位置
- 14. 從另一個視圖控制器
- 15. 從另一個視圖控制器
- 16. 從另一個視圖控制器類
- 17. 從另一個視圖控制器
- 18. 從MKMapKit中的註釋標註按鈕顯示另一個視圖控制器
- 19. 從一個視圖控制器到另一個ViewController中去,並更新
- 20. UIAlertView按鈕到另一個視圖控制器
- 21. Swift IOS:一個視圖控制器中的幾個按鈕,控制另一個視圖控制器中的圖像視圖顯示
- 22. 從另一個視圖控制按鈕文本
- 23. 從一個UITableView控制器切換到視圖 - 控制
- 24. 從控制器的視圖MVC更改圖像按鈕圖像
- 25. 如何將UI ImageView從一個視圖控制器傳遞到另一個視圖控制器? swift 3
- 26. 從另一個類更新UI控件
- 27. 如何使一個按鈕在不同的視圖控制器上更改另一個按鈕的標題
- 28. 從另一個視圖控制器的視圖控制器觸發器操作
- 29. 在另一個視圖控制器中禁用1視圖控制器的按鈕
- 30. 刷新UITableView當一個Segue發生到另一個視圖控制器
感謝您的快速響應。如何在swift中從另一個類獲得對UITableView的引用? – user3776662
看到我編輯的答案 - 這有幫助嗎? – Jason
是的,這絕對有幫助,唯一的問題是,當我嘗試引用第一個視圖控制器時,出現錯誤。 「讓vc = ViewController1()」Xcode對我大喊大叫,出於某種原因拋出一個錯誤。有任何想法嗎? – user3776662