我有一个设置弹出窗口。我在弹出窗口中有一个按钮(更多信息)。当用户单击该按钮时,我想要调出另一个视图,并且想要关闭弹出窗口。
如何在弹出窗口中的“更多信息”按钮中执行此操作?
目前,我有一个处理按钮按下的函数:
- (IBAction)showFullVersionInfo:(id)sender
{
[self dismissPopoverAnimated:YES];
parent.settingsPopover = nil;
//need to show more Info...
}
父级持有对弹出窗口的引用'settingsPopover‘,我想清除它。
发布于 2012-03-17 07:05:41
你不会想从popover控制器内部来做这件事的。popover控制器应该只管理popover的内容,而不是如何以及何时显示/隐藏popover。
您只能在父控制器中执行此类操作。仅对显示它(并拥有它)的控制器隐藏弹出窗口。
你的问题实际上应该是:如何告诉父控制器用户已经在弹出窗口中执行了一些操作?
答案是:委托。定义一个委托,在你的父控制器中实现它,将它传递给你的popover,并在IBAction中调用委托方法。
发布于 2012-03-17 06:57:23
最好的方法是在popoverControllerDidDismissPopover:
委托回调中释放popover。不幸的是,这个回调不会在dismissPopoverAnimated:
之后调用。我通过输入另一个名为popoverDidFinishWorking:
的统一回调解决了这个问题。当点击关闭按钮时,将其从弹出窗口发送给所有者,等等。当所有者获取popoverDidFinishWorking:
时,它只是调用popoverControllerDidDismissPopover:
并隐藏/释放弹出窗口(settingsPopover)。您还可以在此回调中显示任何其他视图。无论如何,这取决于你的应用程序设计。
发布于 2012-03-17 07:55:26
在启动settingsPopover的函数的“父”对象中,应该有:
- (void) launchDismissSettingPopover {
if (settingPopover == nil) {
//Create an launch the popover
} else {
[self dismissPopoverAnimated:YES];
// settingPopover will be nil in navigationController didShowViewController
//self.settingsPopover = nil;
}
}
在父类中之前应该有self.navigationController.delegate = self
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if (viewController == self && self.settingPopover != nil) {
//need to show more Info based on settingPopover info here
self.settingPopover = nil ;
}
}
然后在您的popover类方法中
- (IBAction)showFullVersionInfo:(id)sender
{
[parent launchDismissSettingPopover];
}
https://stackoverflow.com/questions/9745407
复制相似问题