0
我有一個TableViewController,讓我們叫它A,這是在另一個視圖控制器的容器視圖,B。當B中的值發生變化時,我需要A來重新加載它的數據。我也需要它從B得到這個改變的值。有任何想法嗎?從父母重新加載TableViewController
我有一個TableViewController,讓我們叫它A,這是在另一個視圖控制器的容器視圖,B。當B中的值發生變化時,我需要A來重新加載它的數據。我也需要它從B得到這個改變的值。有任何想法嗎?從父母重新加載TableViewController
您是否考慮過使用通知?
所以,在乙 - 我會做這樣的事情:
// 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
}
跟進一個看起來像這樣 - 在ValueType
簡直是你提到的值的類型:
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()
}
}
}
最後 - 不要忘了在一的deinit
方法:
import UIKit
class ViewControllerA: UITableViewController {
//... truncated
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
//... truncated
}
您只需從你的對象B的實例調用在一個方法。這基本上是一種委託模式。 – Paulw11