Ios UIPopoverController:在视图被解除后更新视图

Ios UIPopoverController:在视图被解除后更新视图,ios,objective-c,uipopovercontroller,Ios,Objective C,Uipopovercontroller,在iPad模拟器上,我有一个ViewController a,它显示一个UIPopoverController,其内容ViewController是ViewController B,在它里面我有一个按钮来关闭UIPopoverController 当它被解除时,我需要根据ViewController B中的某个字段更新ViewController A的视图 为了做到这一点,我将ViewController A声明为ViewController B的属性(weakref),以便在ViewContr

在iPad模拟器上,我有一个ViewController a,它显示一个UIPopoverController,其内容ViewController是ViewController B,在它里面我有一个按钮来关闭UIPopoverController

当它被解除时,我需要根据ViewController B中的某个字段更新ViewController A的视图

为了做到这一点,我将ViewController A声明为ViewController B的属性(weakref),以便在ViewController B中,如果它取消popover,我可以说:

[self.viewControllerA.popover dismissPopoverAnimated:YES];
self.viewControllerA.popover = nil;
self.viewControllerA.textLabel.text = self.someField
这是正确的做法吗?因为当我们务实地抛弃popover时没有回调,所以我想不出任何更好的解决方案


有人有更好的主意吗?传递视图控制器对我来说似乎很尴尬。

我认为,委托或发送通知会更好

注意:

更改执行顺序将使当前代码更加完善

self.viewControllerA.textLabel.text = self.someField
[self.viewControllerA.popover dismissPopoverAnimated:YES];
self.viewControllerA.popover = nil;

最好的方法是使用
委托
,只需在控制器B中声明委托即可

@protocol ControllerSDelegate <NSObject>
-(void) hidePopoverDelegateMethod;
@end

在控制器A中,您可以处理此委托调用

-(void) hidePopoverDelegateMethod {
    [self.paymentPopover dismissPopoverAnimated:YES];
    if (self.paymentPopover) {
        self.paymentPopover = nil;
    }
    [self initializeData];
}

我更喜欢委托而不是通知,因为应该只通知一个对象。直接调用-dismissPopoverAnimated:时不调用此函数。
-(void) hidePopoverDelegateMethod {
    [self.paymentPopover dismissPopoverAnimated:YES];
    if (self.paymentPopover) {
        self.paymentPopover = nil;
    }
    [self initializeData];
}