Как открыть UIView в полноэкранном режиме с помощью панели вкладок?


это моя проблема.

  1. У меня есть приложение tabBar.
  2. На первой вкладке у меня есть таблица.
  3. При нажатии на таблицу отображается модальное представление.
  4. Чтобы вернуться от модального представления к первому виду, я использую
[self presentModalViewController:nw animated:YES];

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

Это способ открыть модальный вид в полноэкранном режиме, закрывающий панель вкладок?
Или также проверить, закрыто ли модальное представление или нет из другого представления?


EDIT: я пытался использовать весь этот код:

 nw = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:nil];
 nw.modalInPopover = YES;
 nw.wantsFullScreenLayout = YES;
 nw.hidesBottomBarWhenPushed = YES;
 nw.contentSizeForViewInPopover = CGSizeMake(320, 480);
 nw.modalPresentationStyle = UIModalPresentationFullScreen;
 nw.view.frame = [[UIScreen mainScreen] applicationFrame];
 [nw.view setNeedsLayout];

но ничего!!! Он не хочет идти в полноэкранном режиме!

Любая идея, пожалуйста?

спасибо,
альберто


person elp    schedule 20.12.2010    source источник
comment
Какой контроллер представления/представления вы представляете модально?   -  person John Parker    schedule 20.12.2010
comment
@middaparka: это представление, которое переворачивается при нажатии на табличное представление и закрывается при нажатии [самопрезентация.....]   -  person elp    schedule 20.12.2010


Ответы (2)


Если представление, которое вы представляете, является полноэкранным, это должно скрыть панель вкладок. Тем не менее, вам может потребоваться изменить размер представления программно, чтобы он был того же размера, что и UIWindow.

Вы должны быть в состоянии сделать что-то вроде...

[nw setFrame:[[UIScreen mainScreen] applicationFrame]];
[nw setNeedsLayout];

...для достижения этой цели. (Извините, в данный момент я работаю на Windows, поэтому не могу подтвердить это. Надеюсь, кто-нибудь предоставит какие-либо настройки, если потребуется.)

Затем вы должны закрыть начальное модальное представление с помощью метода делегата в исходном классе. (См. раздел «Отключение контроллера модального представления» в View Руководство по программированию контроллера для iOS.) Затем исходный класс избавится от модального представления.

person John Parker    schedule 20.12.2010
comment
извините, но я не могу показать nw в полноэкранном режиме таким образом ... это то же самое. - person elp; 20.12.2010

Решено с помощью уведомления!

При изменении вкладки я отправляю уведомление и закрываю модальный контроллер.

- (BOOL)tabBarController:(UITabBarController *)tbController shouldSelectViewController:(UIViewController *)viewController { 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"DataComplete" object:nil];
    return YES;
}

На мой взгляд, классы получают уведомление и увольняют контроллер!

- (void)downloadDataComplete:(NSNotification *)notif {
    NSLog(@"Received Notification");

    [self dismissModalViewControllerAnimated:YES];
}

Теперь можно снова открыть модальное представление, изменив вкладку!
Это обходной путь, но он работает!

Альберто.

person elp    schedule 04.01.2011
comment
и если вы хотите полноэкранный режим, удалите объект uiviewcontroller из построителя интерфейса! - person elp; 04.01.2011