PopoverController пользовательского интерфейса IOS не закрывается нажатием снаружи после изменения ориентации устройства

Я столкнулся со странной проблемой с UIPopoverController. При создании всплывающего окна мы установили свойство сквозных просмотров. Мы хотели, чтобы всплывающее окно закрывалось, если мы нажмем где-нибудь за его пределами.

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

person Peyush Goel    schedule 08.10.2013    source источник
comment
Вы где-нибудь использовали contentSizeForViewInPopover?   -  person Samkit Jain    schedule 08.10.2013
comment
да... он используется внутри представлений, которые мы загружаем внутри всплывающего окна   -  person Peyush Goel    schedule 08.10.2013
comment
затем используйте предпочитаемыйContentSize вместо этого, потому что он устарел в IOS 7   -  person Samkit Jain    schedule 08.10.2013
comment
отклонить всплывающее окно во время вращения и снова сделать его видимым. Это сработает...   -  person Samkit Jain    schedule 08.10.2013
comment
Это хак и может сработать. Я пробую это прямо сейчас. но есть ли правильный способ справиться с этим?   -  person Peyush Goel    schedule 08.10.2013
comment
Это тоже не сработало   -  person Peyush Goel    schedule 08.10.2013
comment
Можете ли вы рассказать мне, как вы реализуете DAT?   -  person Samkit Jain    schedule 09.10.2013
comment
возникла проблема с моей реализацией. у нас были UIButtons и не было UIBarButtonItem. Мы делали UIButton *control = (UIButton *) sender; UIBarButtonItem *barButtonItemView = [[UIBarButtonItem alloc] init]; [barButtonItemView setCustomView:control]; из-за более ранней проблемы, с которой мы столкнулись при изменении ориентации. А затем использовать его для всплывающего окна, используя вышеупомянутый способ   -  person Peyush Goel    schedule 09.10.2013


Ответы (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];
person Peyush Goel    schedule 09.10.2013