2014-10-07 3 views
5

Как и другие ближайшие к 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 представляется таким образом, чтобы его маленький указатель указывал на значок «i», который находится на ячейке tableview в виде таблицы.

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

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

Большое спасибо!

+1

Может ли кто-нибудь помочь мне с этим? – Kent

+0

Вы нашли ответ? У меня такая же проблема – silvaric

ответ

2

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

Смежные вопросы