Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS UI popoverController不';在设备方向改变后,不要通过点击外部来关闭_Ios_Objective C_Ios7_Uipopovercontroller_Device Orientation - Fatal编程技术网

IOS UI popoverController不';在设备方向改变后,不要通过点击外部来关闭

IOS UI popoverController不';在设备方向改变后,不要通过点击外部来关闭,ios,objective-c,ios7,uipopovercontroller,device-orientation,Ios,Objective C,Ios7,Uipopovercontroller,Device Orientation,我在使用UIPopoverController时遇到了一个奇怪的问题。在创建popover时,我们设置了passthrough视图属性。如果我们点击它外面的任何地方,我们想把它关闭 [self.popover presentPopoverFromBarButtonItem:barButtonItemView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

我在使用
UIPopoverController
时遇到了一个奇怪的问题。在创建popover时,我们设置了passthrough视图属性。如果我们点击它外面的任何地方,我们想把它关闭

[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];
它工作正常,直到设备的方向发生变化。方向改变后,外部攻丝没有影响。方向更改后,永远不会调用方法
-popOvercontrollersoulddismisspover
。如果我再按一下按钮,它就会开始正常工作。i、 e.如果我点击外面,它会重新启动popover并关闭popover

我现在正在做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];
}

我现在已经解决了执行中的一个问题,并且它起了作用。 我们有UIButtons而不是UIBarButton,但由于方法
presentPopoverFromRect
的一些早期问题(当ipad的方向发生变化时会出现问题),我们以这种方式呈现Popover:

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];

你在任何地方使用过contentSizeForViewInPopover吗?是的。。。它在我们加载到popover中的视图中使用,然后使用preferredContentSize代替它,因为它在IOS 7Popover中被去除,在旋转时再次使其可见。这将起作用…这是一个黑客攻击,可能会起作用。我现在正在尝试。但是有没有合适的方法来处理呢?