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

Итак, у меня UITableView внутри splitViewController. У меня UIActionSheet внутри UITableViewCell, если ячейка содержит номер телефона, actionSheet отображает список опций (Отправить сообщение, Добавить в контакты, Копировать). Все это отлично работает, когда iPad находится в портретной ориентации, но при нажатии на ячейку в альбомной ориентации я получаю следующую ошибку:

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

Я просмотрел много сообщений SO по этой проблеме, и все они, похоже, решают проблему при использовании UIImagePickerController или UIAlertViewController, но ни один, похоже, не получает / не решает ошибку при использовании UIActionSheet.

Вот мой код:

            UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
                                                                 delegate:self
                                                        cancelButtonTitle:nil
                                                   destructiveButtonTitle:nil
                                                        otherButtonTitles:@"Send Message", @"Add to Contacts", @"Copy", nil];


        CGRect cellRect = cell.bounds;
        cellRect.size.width = cell.frame.size.width * 2;
        cellRect.origin.x = -(cell.frame.size.width / 2);

        [actionSheet showFromRect:cellRect inView:cell animated:YES];

Я также реализовал UIActionSheet методы делегата для решения некоторых других проблем, поэтому мне интересно, нужно ли мне добавить код для решения проблем в методах делегата ?:

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    dispatch_async(dispatch_get_main_queue(), ^{
        [actionSheet dismissWithClickedButtonIndex:buttonIndex animated:YES];
    });

}

- (void)didPresentActionSheet:(UIActionSheet *)actionSheet
{

}

Любая помощь горячо приветствуется. Это предупреждение может быть несерьезным, но я не уверен, отклонит ли Apple его из-за предупреждения. Приложение не вылетает или что-то в этом роде, но все же я хотел бы избавиться от ошибки. Спасибо.


person rosshump    schedule 25.05.2016    source источник
comment
В чем причина задержки презентации до следующего цикла выполнения?   -  person Sander Saelmans    schedule 25.05.2016
comment
Я думаю, что этот код остался от предыдущей попытки использования этой функции с использованием UIPopoverController. Сейчас сниму, хорошее место.   -  person rosshump    schedule 25.05.2016
comment
Думаю, проблема в этой строке: [actionSheet showFromRect:cellRect inView:cell animated:YES]. Вы представляете actionSheet в ячейке, а все, что вы хотите сделать, - это представить его в корневом представлении вашего viewController. Попробуйте изменить cell на self.view   -  person Sander Saelmans    schedule 25.05.2016
comment
К сожалению, это не помогло - он просто отображает actionSheet под первой ячейкой в ​​tableView. Я также попытался изменить его на cell.contentView, но предупреждение осталось тем же. Я в тупике, потому что кажется, что это должно появиться только в том случае, если я использую какие-либо функции камеры.   -  person rosshump    schedule 25.05.2016


Ответы (1)


У меня такая же проблема, но она идет еще дальше, так как никакие действия, похоже, не работают. Стоит отметить, что UIActionSheet устарел в iOS 8, и его следует заменить на UIAlertController, использующий предпочитаемый стиль .ActionSheet. Я получаю тот же результат отладки при использовании UIAlertController, но, по крайней мере, мои действия, похоже, работают.

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

person Paul    schedule 26.05.2016