Модально присутствующий UIImagePickerController не скрывает UITabBar, если текущее представление имеет UINavigationController в качестве контроллера контейнера - PullRequest
0 голосов
/ 24 июня 2011

У меня есть приложение с вкладками, и вторая вкладка переходит в представление стиля контроллера навигации.

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

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

первый http://www.jobline.com.sg/images/no_use/1.png

Однако в результате у камеры отсутствует элемент управления для съемки / отмены изображения, например:

секунда http://www.jobline.com.sg/images/no_use/2.png

Как мне спрятать UITabBar и видеть управление камерой? Я знаю, что это можно сделать, потому что на вкладке профиля Skype также есть камера, а затем отображается таблица UIAction для «Сфотографировать», а затем полноэкранный вид камеры. Я считаю, что вкладка профиля имеет контроллер навигации в качестве корневого представления.

Спасибо миллион за вашу помощь.

Вот код, который я использовал:

- (void)takePicture:(id)sender {
  UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

  if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
  } else {
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  }

  [self presentModalViewController:imagePicker animated:YES];
}

Это довольно простой код представления imagePicker модально. Поэтому мне интересно, почему нет управления камерой и почему моя панель вкладок может перекрывать ее. Это из-за моей иерархии представлений?

1 Ответ

2 голосов
/ 24 июня 2011

Хорошо, у меня есть решение, но оно несколько "хакерское". Моя идея состоит в том, чтобы опубликовать уведомление в NSNotificationCenter, который вызывает метод, который скрывает панель вкладок. Пример:

Внутри делегата приложения (или любого другого элемента управления вашей вкладкой ...)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideTabbar) name:@"hideTab" object:nil];
    // Override point for customization after application launch.
    // Add the tab bar controller's current view as a subview of the window
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

-(void)hideTabbar{
    [[_tabBarController tabBar] setHidden:YES];
}

А затем, чтобы скрыть панель вкладок при появлении вида с камеры, просто опубликуйте уведомление, например,

[[NSNotificationCenter defaultCenter] postNotificationName:@"hideTab" object:nil];

И затем, конечно, есть кто-то, кто может показать его, когда вид с камеры исчезнет.

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

...