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 终止

PopoverController Ionic 4?

为 PopoverController 子类化 UITableViewController

当 iPad 旋转时,ActionSheet 的 PopoverController 不会停留在窗口的中心

在以 Uinavigationcontroller 作为视图的 Popovercontroller 中更改导航栏和工具栏的色调