iOS - Как я могу показать UIImagePicker поверх UITableView? - PullRequest
0 голосов
/ 05 марта 2012

У меня есть ячейка таблицы, которая при выборе должна позволять пользователю выбирать изображение из библиотеки фотографий или делать новое изображение.

Структура экрана:

UITabBar -> UINavigationController -> ParentController -> MyController

Код для достижения этой цели в MyController:

- (void)showPhotoMenu
{
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

        UIActionSheet *actionSheet = [[UIActionSheet alloc]
                                  initWithTitle:nil
                                  delegate:self
                                  cancelButtonTitle:@"Cancel"
                                  destructiveButtonTitle:nil
                                  otherButtonTitles:@"Take Photo", @"Choose From Library", nil];

        [actionSheet showInView:self.view];
    } else {
        [self choosePhotoFromLibrary];
    }
}

При нажатии на ячейку я получаю возможность выбрать из библиотеки или сделать фотографию, но после этого ничего не происходит. Вывод журнала показывает

Presenting action sheet clipped by its superview. Some controls might not respond to touches. On iPhone try -[UIActionSheet showFromTabBar:] or -[UIActionSheet showFromToolbar:] instead of -[UIActionSheet showInView:].

Но я не уверен, что именно поэтому экраны ImagePicker (библиотека фотографий или камера) не будут отображаться.

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

Кто-нибудь может посоветовать, где я могу пойти не так?

1 Ответ

1 голос
/ 05 марта 2012

Недостаточно кода, чтобы сказать наверняка, но

Action Sheets использует ваш код в качестве делегата и возвращает вам управление в фиксированном методе делегата

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
  if (buttonIndex == actionSheet.firstOtherButtonIndex + 0) {
    //code to take photo
  } else if (buttonIndex == actionSheet.firstOtherButtonIndex + 1) {
    //code to take access media
  } 
}

Другое предупреждающее сообщение - Вы видите или не видите все опции в вашем листе действий?

[actionSheet showInView:self.view]; 

Есть еще несколько опций, в зависимости от того, есть ли у вас панель навигации или панель вкладок, у меня есть программа для iPhone с большим количеством вариантов действий, чем у вас, и я никогда не получаю сообщение об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...