UIPopoverController:关闭后更新视图

Posted

技术标签:

【中文标题】UIPopoverController:关闭后更新视图【英文标题】:UIPopoverController: update view after it is dismissed 【发布时间】:2014-01-21 06:55:44 【问题描述】:

在 iPad 模拟器上,我有一个 ViewController A,它显示一个 UIPopoverController,其 contentViewController 是 ViewController B,在其中我有一个按钮来关闭 UIPopoverController。

当它被关闭时,我需要根据 ViewController B 中的某些字段更新 ViewController A 的视图。

为了做到这一点,我将 ViewController A 声明为 ViewController B 的属性 (weakref),以便在 ViewController B 中关闭弹出框的位置,我可以说:

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

这是正确的做法吗?由于我们务实地解除弹出框时没有回调,所以我想不出更好的解决方案。

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

【问题讨论】:

【参考方案1】:

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

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

并调用此操作以传递数据并关闭控制器,如

if (_delegate != nil) 
    [_delegate hidePopoverDelegateMethod];

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

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

【讨论】:

【参考方案2】:

我认为,委托或发送 NSNotification 会更好。

注意:

执行顺序的更改将使您当前的代码更加完美。

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

【讨论】:

我更喜欢委托而不是通知,因为应该只通知一个对象。 直接调用-dismissPopoverAnimated:时不会调用这个。

以上是关于UIPopoverController:关闭后更新视图的主要内容,如果未能解决你的问题,请参考以下文章

UIPopoverController 不关闭

关闭 UIPopoverController 的最快方法是啥?

如何在 UIPopoverController 上创建按钮 [关闭]

ipad - 关闭 UIPopoverController

关闭 UIPopoverController 不会卸载 contentController

可以在拖动操作上关闭 UIPopoverController