2014-02-01 4 views
0

У меня есть приложение, в котором вы можете поворачивать пейзаж или портрет, когда вы делаете это, кнопка перемещает местоположение. Я сделал это, изменив ограничения при изменении ротации.IPad не меняет местоположение при повороте экрана

Проблема. У меня есть popovers, которые отображаются при выборе этой кнопки. Таким образом, пользователь может выбрать кнопку, отобразить popover, повернуть экран, кнопка движется, но popover все еще указывает на старое местоположение кнопки.

Я вызываю popover по следующему коду.

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

Есть ли простое решение для исправления этой ситуации.

Благодаря

ответ

0

Решение состоит в том, чтобы представить UIPopoverController снова в didRotateFromInterfaceOrientation: обратный вызов.

Рассмотрите следующий фрагмент.

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 

Надеюсь, это поможет.

Смежные вопросы