从父级重新加载 TableViewController
Reload TableViewController from parent
我有一个 TableViewController,我们称它为 A,它位于另一个视图控制器 B 的容器视图中。当 B 中的值发生变化时,我需要 A 重新加载它的数据。我还需要它从 B 中获取更改后的值。有什么想法吗?
您是否考虑过使用通知?
所以,在 B – 我会做类似的事情:
// ViewControllerB.swift
import UIKit
static let BChangedNotification = "ViewControllerBChanged"
class ViewControllerB: UIViewController {
//... truncated
func valueChanged(sender: AnyObject) {
let changedValue = ...
NSNotificationCenter.defaultCenter().postNotificationName(
BChangedNotification, object: changedValue)
}
//... truncated
}
跟进 A 看起来像这样 – 其中 ValueType
只是您提到的 value 的类型:
import UIKit
class ViewControllerA: UITableViewController {
//... truncated
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//...truncated
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "onBChangedNotification:",
name: BChangedNotification,
object: nil)
}
//... truncated
func onBChangedNotification(notification: NSNotification) {
if let newValue = notification.object as? ValueType {
//...truncated (do something with newValue)
self.reloadData()
}
}
}
最后 – 不要忘记 remove the observer 在 A 的 deinit
方法中:
import UIKit
class ViewControllerA: UITableViewController {
//... truncated
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
//... truncated
}
我有一个 TableViewController,我们称它为 A,它位于另一个视图控制器 B 的容器视图中。当 B 中的值发生变化时,我需要 A 重新加载它的数据。我还需要它从 B 中获取更改后的值。有什么想法吗?
您是否考虑过使用通知?
所以,在 B – 我会做类似的事情:
// ViewControllerB.swift
import UIKit
static let BChangedNotification = "ViewControllerBChanged"
class ViewControllerB: UIViewController {
//... truncated
func valueChanged(sender: AnyObject) {
let changedValue = ...
NSNotificationCenter.defaultCenter().postNotificationName(
BChangedNotification, object: changedValue)
}
//... truncated
}
跟进 A 看起来像这样 – 其中 ValueType
只是您提到的 value 的类型:
import UIKit
class ViewControllerA: UITableViewController {
//... truncated
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//...truncated
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "onBChangedNotification:",
name: BChangedNotification,
object: nil)
}
//... truncated
func onBChangedNotification(notification: NSNotification) {
if let newValue = notification.object as? ValueType {
//...truncated (do something with newValue)
self.reloadData()
}
}
}
最后 – 不要忘记 remove the observer 在 A 的 deinit
方法中:
import UIKit
class ViewControllerA: UITableViewController {
//... truncated
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
//... truncated
}