我的问题听起来很基础,但是我想知道从另一个视图控制器访问UITableViewController及其tableView和属性的最佳和最简单的方法。非常感谢...。
答案 0 :(得分:1)
您应该将UITableViewController实例设置为新视图控制器的变量。
例如
class VC1: UIViewController {
func launch() {
let vc2 = VC2()
vc2.previousVC = self
present(vc2,..)
}
}
claass VC2: UIViewController {
weak var previousVC: VC1?
}
如果使用segues,则可以执行相同的设置:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "SomeSegue" {
if let vc2 = segue.destination as? VC2 {
vc2.previousVC = self
}
}
}
答案 1 :(得分:0)
为什么不为此使用被动/异步方法。对于异步方法,您可以使用通知中心(还有许多其他方法)。在您拥有tableView的第一个控制器中,添加以下代码:
NotificationCenter.default.addObserver(self, selector: #selector(onDidReceiveNotification(_:)), name: .didReceiveNotification, object: nil)
@objc func onDidReceiveNotification(_ notification:Notification) {
// Do something now with your UITableView
}
在需要更改或对第一个视图控制器及其tableView进行某些操作的第二个控制器中,您发布通知:
NotificationCenter.default.post(name: .didReceiveNotification, object: nil)
您还可以使用RxSwift和RxCocoa的反应性方法,创建可观察的对象,并在onNext()事件中观察其值。 您可以在第一个视图控制器中创建如下主题:
let subject = PublishSubject<String>()
let subscriptionOne = subject.subscribe(onNext: { string in
// Do something now with your UITableView. You can pass your custom model instead of string
print("First Subscription: ", string)
})
现在,在第二个视图控制器中,您可以在完成一些工作后调用onNext()方法,如下所示:
subject.onNext("3")
答案 2 :(得分:0)
到目前为止,最简单的方法是将其绑定到全局变量。
使全局变量集等于UITableViewController(),例如
"~ts/Extensions/ExtensionMethods"
然后在viedDidLoad()函数中,键入var tableVC = UITableViewController()
以将其设置为等于当前视图控制器。
从那里开始tableVC = self
即可轻松进行更改。