在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
这是正确的做法吗?由于当我们务实地解雇popover时没有回调,我想不出任何更好的解决方案。
有人有更好的主意吗?传递视图控制器对我来说似乎很尴尬。
答案 0 :(得分:0)
我认为,代表或发送NSNotification会更好。
注意:强>
更改执行顺序将使您当前的代码更加完美。
self.viewControllerA.textLabel.text = self.someField
[self.viewControllerA.popover dismissPopoverAnimated:YES];
self.viewControllerA.popover = nil;
答案 1 :(得分:0)
最好的方法是使用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];
}