Представление контроллеров представления на отдельном... - иногда

Как и другие, приходящие на iOS8, я получаю предупреждение:

Presenting view controllers on detached view controllers is discouraged <EditItineraryViewController: 0x7ca56e00>.

Это вызвано следующим кодом:

- (void)editActivityDetailsForIndexPath:(NSIndexPath *)indexPath {
    NSPredicate *predicateForDisplay = [[NSPredicate alloc] init];
    switch (indexPath.section) {
        case kIncompleteActivitiesSection:
            predicateForDisplay = _predIncomplete;
            break;
        case kCompleteActivitiesSection:
            predicateForDisplay = _predComplete;
            break;
        default:
            break;
    }
    NSString *theActivityName = [[NSString alloc] init];
    theActivityName = [[[_activitiesArray filteredArrayUsingPredicate:predicateForDisplay] objectAtIndex:indexPath.row] activityName];
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    ActivityDetailViewController *activityDetailVC = [storyboard instantiateViewControllerWithIdentifier:@"ActivityDetailView"];
    activityDetailVC.modalPresentationStyle = UIModalPresentationFormSheet;
    activityDetailVC.delegate = self;
    // send the activity to the view
    activityDetailVC.theActivity = [[_activitiesArray filteredArrayUsingPredicate:predicateForDisplay] objectAtIndex:indexPath.row];
    // configure the look of the view
    _activityDetailsPopover = [[UIPopoverController alloc] initWithContentViewController:activityDetailVC];
    _activityDetailsPopover.delegate = self;
    ItineraryCell *cell = (ItineraryCell *)[self.itineraryTableView cellForRowAtIndexPath:indexPath];
    activityDetailVC.contentView.backgroundColor = [UIColor whiteColor];
    activityDetailVC.navigationBar.barTintColor = _colorSchemeLightColor;
    activityDetailVC.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:_colorSchemeColor};
    activityDetailVC.saveButton.tintColor = _colorSchemeColor;
    activityDetailVC.cancelButton.tintColor = _colorSchemeColor;
    activityDetailVC.labelB.textColor = _colorSchemeColor;
    activityDetailVC.labelM.textColor = _colorSchemeColor;
    activityDetailVC.activityTitle.textColor = _colorSchemeColor;
    activityDetailVC.activityTitle.font = [UIFont boldSystemFontOfSize:17.0];
    // present the view
    [_activityDetailsPopover presentPopoverFromRect:cell.cellDetailsButton.frame inView:cell.cellDetailsButton.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

Это приложение для iPad, и в этом случае всплывающее окно представлено таким образом, чтобы его маленький указатель указывал на значок "i", который находится в ячейке таблицы в виде таблицы.

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

Любые идеи, что я могу посмотреть, чтобы выяснить, где иерархия неисправна? Связано ли это с тем, как генерируется ячейка табличного представления, а затем с этим поповером, представленным поверх него, или оно имеет прямое отношение к самому поповеру? Или это может быть связано с видом на стол. Я даже не знаю, где начать искать.

Спасибо!

1 ответ

Я обошел эту проблему, представив поповер из контроллера представления, который представляет tableView (в моем случае это представление коллекции). Проблема возникает, когда вы представляете из клетки. Я предполагаю, что любая ячейка считается "автономным контроллером представления", поэтому представление от них даст вам эту ошибку и не будет получать события вращения, которые, в свою очередь, не будут использовать popoverPresentationController:willRepositionPopoverToRect:inView: Перезвоните.

Другие вопросы по тегам