在分离的...上呈现视图控制器 - 有时

时间:2014-10-07 23:40:09

标签: objective-c uitableview uiviewcontroller ios8 uipopover

像其他人一样来到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应用程序,在这种情况下,popover的呈现方式是让它的小指针指向&#34; i&#34;坐在tableview中的tableview单元格上的图标。

这可以在我的应用中的其他三个位置使用而不会引起警告。但出于某种原因,通过这种实施,它会引发警告。奇怪的是,这是我的应用程序中的第一个地方,我使用这种方法从tableview单元格呈现弹出窗口,其他实例只是此代码的副本!

我可以看到什么想法,以找出层次结构被错误的地方?它是否与tableview单元格的生成方式有关,然后在其上显示此弹出窗口,还是必须严格执行popover本身?或者它可能与tableview有关。我甚至都不知道从哪里开始看。

非常感谢!

1 个答案:

答案 0 :(得分:2)

我通过从提供tableView的视图控制器(在我的例子中是一个集合视图)中呈现popover来解决这个问题。当你从一个单元出现时会出现问题。 我假设任何单元格都被认为是“独立视图控制器”,因此从它们中呈现将给出此错误,并且不会接收旋转事件,而反过来也不会使用popoverPresentationController:willRepositionPopoverToRect:inView:回调。