IOS UI popoverController 在设备方向更改后不会通过点击外部来关闭
Posted
技术标签:
【中文标题】IOS UI popoverController 在设备方向更改后不会通过点击外部来关闭【英文标题】:IOS UI popoverController doesn't dismiss by tapping outside after device orientation changes 【发布时间】:2013-10-08 11:21:55 【问题描述】:UIPopoverController
遇到了一个奇怪的问题。在创建弹出框时,我们设置了 passthrough views 属性。如果我们点击它之外的任何地方,我们希望弹出框关闭。
[self.popover presentPopoverFromBarButtonItem:barButtonItemView
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
// comment the below line if only toggle feature is expected to close the popover
[self.popover setPassthroughViews:self.tileMenu.tileMenuButtonsArray];
它可以正常工作,直到设备的方向发生变化。方向改变后,向外敲击无效。方法- popoverControllerShouldDismissPopover
- 在方向改变后永远不会被调用。如果我再次点击该按钮,它就会开始正常工作。即,如果我在外面点击,它会重新启动弹出窗口并关闭弹出窗口。
我现在正在开发 ios 7。
以前有人遇到过这个问题吗?任何帮助将不胜感激。
更新: 我尝试关闭并重新打开弹出框。效果也不好:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
if ( [self.popover isPopoverVisible] )
[self.popover dismissPopoverAnimated:NO];
self.reopenPopover = YES;
-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
if (self.reopenPopover)
[self presentPopover:self.selectedTileMenuBarButtonItem];
self.reopenPopover = NO;
-(void) presentPopover:(UIBarButtonItem *) barButtonItemView
self.selectedTileMenuBarButtonItem = barButtonItemView;
[self.popover presentPopoverFromBarButtonItem:barButtonItemView
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
// comment the below line if only toggle feature is expected to close the popover
[self.popover setPassthroughViews:self.tileMenu.tileMenuButtonsArray];
【问题讨论】:
你在任何地方使用过 contentSizeForViewInPopover 吗? 是的...它用于我们在弹出框内加载的视图中 然后使用preferredContentSize 代替那个,因为它在IOS 7 中被贬低了 旋转时关闭弹出框并再次使其可见..这将起作用... 这是一个 hack,可能会起作用。我现在正在尝试。但是有没有合适的方法来处理呢? 【参考方案1】:我现在已经修复了实现的一个问题,并且它有效。
我们有 UIButtons 而不是 UIBarButton,但由于方法 presentPopoverFromRect
的一些较早问题(当 ipad 的方向改变时出现问题),我们以这种方式呈现弹出框:
UIButton *control = (UIButton *) sender;
UIBarButtonItem *barButtonItemView = [[UIBarButtonItem alloc] init];
[barButtonItemView setCustomView:control];
[self.popover presentPopoverFromBarButtonItem:barButtonItemView permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];
这不是必需的。下面的代码解决了这个问题:
[self.popover presentPopoverFromRect:[sender bounds] inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
// comment the below line if only toggle feature is expected to close the popover
[self.popover setPassthroughViews:self.tileMenu.tileMenuButtonsArray];
【讨论】:
以上是关于IOS UI popoverController 在设备方向更改后不会通过点击外部来关闭的主要内容,如果未能解决你的问题,请参考以下文章
带有 Popovercontroller 的 BarButtonItem?
为 PopoverController 子类化 UITableViewController
当 iPad 旋转时,ActionSheet 的 PopoverController 不会停留在窗口的中心
在以 Uinavigationcontroller 作为视图的 Popovercontroller 中更改导航栏和工具栏的色调