【问题标题】:IPad not changing popover location on rotation of screeniPad不会在屏幕旋转时更改弹出框位置
【发布时间】:2014-02-01 22:48:39
【问题描述】:

我有一个应用程序,您可以旋转视图横向或纵向,当您这样做时,一个按钮会移动位置。我通过在旋转变化时更改约束来做到这一点。

问题是当您选择此按钮时会显示弹出框。因此用户可以选择按钮,显示弹出框,旋转屏幕,按钮移动但弹出框仍然指向按钮的旧位置。

我通过以下代码调用弹出框。

    TableViewController = [[TableViewPopover alloc] initWithNibName:@"TableViewPopover" bundle:nil];
    [TableViewController setDelegate:self];
    TableViewPopoverController = [[UIPopoverController alloc] initWithContentViewController:TableViewController];
    [TableViewPopoverController setDelegate:self];

    TableViewPopoverController.popoverContentSize = CGSizeMake(TableViewController.view.frame.size.width, TableViewController.view.frame.size.height);


    if ([TableViewPopoverController isPopoverVisible])
    {
        [TableViewPopoverController dismissPopoverAnimated:YES];
    }
    else
    {
        CGRect popRect = CGRectMake((self.LoginButtonProp.frame.origin.x),
                                    (self.LoginButtonProp.frame.origin.y),
                                    (self.LoginButtonProp.frame.size.width),
                                    (self.LoginButtonProp.frame.size.height));
        [TableViewPopoverController presentPopoverFromRect:popRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }

有没有简单的解决方案来纠正这种情况。

谢谢

【问题讨论】:

    标签: ipad popover


    【解决方案1】:

    解决方案是在didRotateFromInterfaceOrientation: 回调中再次呈现UIPopoverController

    考虑以下 sn-p。

    typedef void (^PopoverControllerPresentationBlock)(void);
    
    @interface ViewController () <UIPopoverControllerDelegate>
    @property (nonatomic, strong) UIPopoverController *popoverController;
    @property (nonatomic, copy) PopoverControllerPresentationBlock popoverControllerPresentationBlock;
    @end
    
    @implementation ViewController
    
    - (IBAction)showButtonPressed:(id)sender {
        __block __weak UIButton *button = sender;
        __block __weak ViewController *weakSelf = self;
    
        // Save the presentation action in a block
        self.popoverControllerPresentationBlock = ^(void){
            [self.popoverController presentPopoverFromRect:[button convertRect:button.bounds toView:weakSelf.view]
                                                    inView:weakSelf.view
                                  permittedArrowDirections:UIPopoverArrowDirectionUp
                                                  animated:YES];
        };
    
        // invoke the presentation block to show the popover now
        self.popoverControllerPresentationBlock();
    }
    
    - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
        if (self.popoverControllerPresentationBlock) {
            // While orientation changed, re-invoke the presentation block
            self.popoverControllerPresentationBlock();
        }
    }
    
    #pragma mark UIPopoverViewControllerDelegate
    
    - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
        // Clear the presentation block so the popover won't be re-presented after user really dismiss it
        self.popoverControllerPresentationBlock = nil;
        self.popoverController = nil;
    }
    
    @end
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      相关资源
      最近更新 更多