我想更新在UITabBar内部的视图控制器之间拆分的UITableView。当在视图控制器内按下按钮时,是否可以更新tableview的内容?我不想进入tableView只是继续更新它。 tableview的逻辑与Array一起工作,所以我需要能够从外部视图控制器类更新它。
答案 0 :(得分:2)
您不应尝试更改其他视图控制器的视图。这违反了封装原则 - 面向对象编程的一个重要原则。
您应该添加其他视图控制器可以调用的方法。
确保更新用作表视图模型的数组,然后将消息发送到另一个视图控制器,告诉它更新它的表视图。
包含表视图的视图控制器只会在其响应的表视图上调用reloadData()
。
答案 1 :(得分:1)
是绝对的 - 只要您有对UITableView的引用,您只需调用:
ViewController1
修改强>
对不起,我误解了这个问题。虽然上述内容对多个视图控制器仍然有效,但Duncan C对于访问另一个视图控制器的视图的不良做法是正确的。例如,假设我有一个班级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()
}
}
。好的做法会有如下内容:
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
我已经添加了UITabBarController实现的内容:
HOSTNAME ARCH NCPU LOAD MEMTOT MEMUSE SWAPTO SWAPUS
-------------------------------------------------------------------------------
global - - - - - - -
compute001 lx26-amd64 4 - 31.4G - 0.0 -
compute002 lx26-amd64 4 - 31.4G - 0.0 -
compute003 lx26-amd64 4 - 31.4G - 0.0 -
compute004 lx26-amd64 4 - 31.4G - 0.0 -
compute005 lx26-amd64 4 - 31.4G - 0.0 -
compute006 lx26-amd64 4 - 31.4G - 0.0 -
compute007 lx26-amd64 4 - 31.4G - 0.0 -
compute008 lx26-amd64 4 - 31.4G - 0.0 -
compute009 lx26-amd64 4 - 31.4G - 0.0 -
compute010 lx26-amd64 4 - 31.4G - 0.0 -
compute011 lx26-amd64 4 - 31.4G - 0.0