在我的应用程序中,我有一个presentViewController
,在其中我有一个打开弹出窗口的按钮。在这个popover中我有一个barButtonItem来保存这个popover的de数据。我希望当用户点击弹出框之外时,数据也可以保存。
我尝试在popoverControllerDidDismissPopover
视图中使用presentViewController
方法。我有代表,但是当我在popover外面点击时,这个方法不会被调用。
我该怎么办?
谢谢!
答案 0 :(得分:5)
添加popOver时添加以下代码:
popover.delegate = self;
还要在.h文件中注册popOverDelegate,其中提示你的popOver COntroller
@interface yourViewController : UIViewController<UIPopoverControllerDelegate>
答案 1 :(得分:3)
你可能已经解决了,但我遇到了同样的问题。我在我的Viewcontroller中持有UIPopoverController
的实例,并且这样做了:
self.popover.delegate = self;
self.popover = [[UIPopoverController alloc] initWithContentViewController:wgtvc];
当然这不起作用,因为我在设置委托后初始化UIPopoverController
,这会覆盖委托设置。所以正确的方法是FIRST初始化UIPopovercontroller,然后设置委托
self.popover = [[UIPopoverController alloc] initWithContentViewController:wgtvc];
self.popover.delegate = self;
也许您正在重新初始化您的UIPopoverController
- 重新初始化后再次设置代理。
答案 2 :(得分:3)
我有同样的问题。您将需要保留popover对象,这样就可以调用委托方法。它奇怪,但它的工作原理。
function projectImageAttr(imageID) {
console.log(imageID);
$("#dialog").dialog({
width: 900,
show: {
effect: "blind",
duration: 1000
},
hide: {
effect: "explode",
duration: 1000
},
resizable: "auto",
modal: true
});
}
答案 3 :(得分:2)
我遇到了同样的问题,我通过为iOS8处理它来解决它。
演示文稿代码
UIViewController *searchViewController = [[UIViewController alloc] init];
[[searchViewController view] addSubview:_searchOptions];
[searchViewController setModalPresentationStyle:UIModalPresentationPopover];
[searchViewController setPreferredContentSize:CGSizeMake(500, 400)];
[_searchOptions setHidden:NO];
[_searchOptions setFrame:[[searchViewController view] bounds]];
[_searchOptions setAutoresizingMask:UIViewAutoresizingFlexibleWidthAndHeight];
if (CRIdiomToolsIsIOS8OrHigher())
{
UIPopoverPresentationController *popOverPresentationController = [searchViewController popoverPresentationController];
[popOverPresentationController setDelegate:self];
[popOverPresentationController setSourceView:[_searchOptionsButton disclosureView]];
[popOverPresentationController setSourceRect:[[_searchOptionsButton disclosureView] bounds]];
[self presentViewController:searchViewController animated:YES completion:nil];
}
else
{
UIPopoverController *popOverControler = [[UIPopoverController alloc] initWithContentViewController:searchViewController];
[popOverControler setDelegate:self];
[popOverControler setPopoverContentSize:CGSizeMake(500, 400)];
[popOverControler presentPopoverFromRect:[[_searchOptionsButton disclosureView] bounds] inView:[_searchOptionsButton disclosureView] permittedArrowDirections:UIPopoverArrowDirectionUp|UIPopoverArrowDirectionLeft animated:YES];
}
委派电话
#pragma mark Delegate Methods: UIPopoverControllerDelegate
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
[self showSearchOptions:NO animated:YES];
}
#pragma mark Delegate Methods: UIPopoverPresentationControllerDelegate
- (void)popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationController *)popoverPresentationController
{
[self showSearchOptions:NO animated:YES];
}
答案 4 :(得分:1)
我知道这些问题已经过时了,但希望它可以帮助那些人...
问题在于弹出控制器的初始化。如果您已在故事板中建立了popover segue,则需要引用此弹出窗口,以便在解除委托时调用该委托。
在准备segue方法时:
而不是:
self.popoverController = [[UIPopoverController alloc]initWithContentViewController:segue.destinationViewController];
self.popoverController.delegate = self;
你需要:
self.popoverController = [(UIStoryboardPopoverSegue *)segue popoverController];
self.popoverController.delegate = self;
然后确保正确处理弹出窗口何时出现在
中答案 5 :(得分:0)
请注意文档!
”当用户已采取措施消除弹出窗口时,在委托上调用。 以编程方式关闭弹出窗口时不会调用此函数。 “
这是我的情况,因为使用此方法,我的弹出窗口在单击按钮时关闭:
dismiss(animated: true, completion: nil)