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 上创建按钮 [关闭]