我正在构建一个iPad应用程序,我需要在其中实现一个弹出视图。
我像往常一样设置了一个视图控制器:
现在在视图控制器中我从(从UIBarButtonItem)加载它,我有这个代码:
- (void) action
{
ItemContent *newItem = [[ItemContent alloc] initWithNibName:@"ItemContent" bundle:nil];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:newItem];
_popover = [[UIPopoverController alloc] initWithContentViewController:nav];
[_popover setPopoverContentSize:CGSizeMake(557, 700) animated:YES];
_popover.delegate = self;
[_popover presentPopoverFromBarButtonItem:self.navigationItem.rightBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
这在UIPopOverController中正确显示了我的view-和UINavigationController。到目前为止一切都很好!
在newItem视图控制器中,我在导航栏中创建了一个“完成”按钮。当按下该按钮时,我希望UIPopOverController消失。我该怎么做:
很快就把事情搞定
如何让我的UIPopOverController调用加载UIPopOverController?视图控制器上的方法
我一直在搜索SO,但 none 的解决方案和答案解决了我的问题。如果我错过了什么,请通知我;)
提前非常感谢你!
答案 0 :(得分:2)
你可以通过委托来做到这一点...... 在NewItem.h中声明一个协议
@protocol NewItemDelegate
-(void)onTapDoneButton;
@end
现在创建一个像这样的委托属性
@property (nonatomic, assign) id<NewItemDelegate>delegate;
在doneButtonPuhsed方法的NewItem.m中调用此
[self.delegate onTapDoneButton];
稍微更改此方法
- (void) action
{
ItemContent *newItem = [[ItemContent alloc] initWithNibName:@"ItemContent" bundle:nil];
newItem.delegate =self;
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:newItem];
_popover = [[UIPopoverController alloc] initWithContentViewController:nav];
[_popover setPopoverContentSize:CGSizeMake(557, 700) animated:YES];
_popover.delegate = self;
[_popover presentPopoverFromBarButtonItem:self.navigationItem.rightBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
现在在此操作方法下面实现NewItemDelegate方法。
-(void)onTapDoneButton{
//dismiss popover here
}
答案 1 :(得分:1)
我也有这个问题,并使用通知解决了它。 在父控制器的viewDidLoad方法中,您必须添加一个观察者:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(closePopover)
name:@"closePopoverName"
object:nil];
然后,在viewDidUnload方法中,删除观察者,如下所示:
[[NSNotificationCenter defaultCenter] removeObserver:self];
当然,你必须创建一个实际上解开popover的函数:
- (void) closePopover
{
[_popover dismissPopoverAnimated:YES];
}
然后,在您的ItemContent控制器中,您只需在要关闭弹出窗口时发布通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"closePopoverName" object:self userInfo:nil];
答案 2 :(得分:0)
您可以在ItemContent上定义协议并在CallerViewController上使用它。如果你想关闭你的Popover,只需调用你的委托方法,你将在你的CallerViewController上实现