私は TableViewController を持っています。それをAと呼びましょう。これは、別のビュー コントローラーBのコンテナー ビューにあります。Bで値が変更されたときにデータをリロードするには、 Aが必要です。この変更された値をBから取得するためにも必要です。何か案は?
1 に答える
1
通知の使用を検討しましたか?
したがって、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
は、単にあなたが言及した値のタイプです。
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()
}
}
}
最後に、Aのメソッドでオブザーバーを削除することを忘れないでください。deinit
import UIKit
class ViewControllerA: UITableViewController {
//... truncated
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
//... truncated
}
于 2015-08-22T23:17:06.147 に答える