我有两个ViewControllers:A& B.当用户在ViewController A上进行更改时,我想在ViewController B上进行一些更改。
现在我正在这样做:对于这个改变,我在ViewController B中有特殊的func,在ViewController B的viewWillApear方法中,每次打开ViewController时都运行这个func。
也许我可以更容易地执行它?
var GlobalVarB = 0
class ViewControllerB: UIViewController {
var localVarB = 0
func update() {
if(localVarB != GlobalVarB) {
localVarB = GlobalVarB
//do something }
}
override func viewWillAppear() {
update()
}
}
答案 0 :(得分:1)
您可以使用NotificationCenter从ViewController A中执行ViewController B中的方法。
在View Controller B中创建一个方法,根据VC A中的更改进行更改,并在ViewController B viewDidLoad / ViewWillAppear中为此notificaitonCenter添加观察者,如下所示。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodName) name:@"notificationName" object:nil];
当您在View Controller A中进行如下更改时,从View Controller A调用Post Notification。
[[NSNotificationCenter defaultCenter]postNotificationName:@"notificationName" object:nil];
您还可以使用UserInfo作为字典传递一些值。
希望它有所帮助。
答案 1 :(得分:1)
您可以使用NSNotification:
在视图控制器B中添加此
- (void) viewDidLoad
{
//Your rest of code then below statement
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveTestNotification:)
name:@"TestNotification"
object:nil];
}
- (void) dealloc
{
// If you don't remove yourself as an observer, the Notification Center
// will continue to try and send notification objects to the deallocated
// object.
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
在视图控制器A中
- (void) youMethodToFireNotification
{
// All instances observing the `TestNotification` will be notified
[[NSNotificationCenter defaultCenter]
postNotificationName:@"TestNotification"
object:self]; //Object here can be any changed value or you can access viewController A instance by sending self.
}