从ViewController B上的ViewController A运行方法

时间:2016-04-14 08:10:14

标签: ios objective-c swift uiviewcontroller

我有两个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()
}
}

2 个答案:

答案 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.
    }