2011-01-13 3 views
0

У меня есть приложение, которое проходит через набор экранов в контроллере навигации, а затем есть экран с контроллером табуляции, в котором один из содержащихся представлений хочет отобразить контроллер модального представления, который должен быть отображается поверх всего приложения (не полный экран).UINavigationController перекрывает ModalViewController

Все работает нормально, но модальное окно частично покрывается сверху навигационным контроллером. Я пробовал использовать self/self.tabBarController/self.navigationController/self.tabBarController.navigationController для вызова presentModalViewController, но они либо не работают, либо все еще отображают модальное окно под ним.

Я искал ответ на этот вопрос весь день, все остальные, похоже, испытывают проблемы, когда он перекрывается, а не когда он этого не делает.

Любые идеи? Благодарю. (код, скриншоты & видео ниже)

- (IBAction)add:(id)sender { 
    // create the view 
    AddAttainmentController *addScreen = [[AddAttainmentController alloc] init]; 
    // pass in a selected pupil 
    [addScreen setPupils:[NSMutableArray arrayWithObject:pupil]]; 
    // add the view to a navigation controller 
    UINavigationController *control = [[UINavigationController alloc] initWithRootViewController:addScreen]; 
    // place the navigation controller on the screen 
    [self presentModalViewController:control animated:YES]; 
    // release at the end 
    [control release]; 
    [addScreen release]; 
} 

Скриншоты: http://cl.ly/032v2k0t0N1s1m3H0511 (вы можете увидеть панель навигации как модальное окно слайдов) http://cl.ly/1h0o453Y3Z051P3S1S37 (панель навигации модального окна охватывается оригинал)

http://cl.ly/1e2J3o1q3V1l1j470m12

ответ

1

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

Контроллеры панели управления всегда будут находиться в корне вашей иерархии контроллера. Из ссылки на класс:

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

+0

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

+0

Альтернатива чему? Что ты пытаешься сделать? Я бы не стал игнорировать эти ограничения, потому что вам приходится иметь дело с неопределенным поведением. Если вам нужна табуляция, как просмотр в стеке навигации, я бы написал один подкласс UIViewController, чтобы поменять несколько подзонов его вида. Если вы хотите, чтобы «модальный», который не заполнял экран, я бы мог видеть, что текущий контроллер представления отображает его как подпункт. Если можно, я бы пересмотрел дизайн пользовательского интерфейса, чтобы избежать столкновения с этими проблемами в первую очередь. – Jonah

+0

Я полагаю, что вы правы, это, похоже, имеет больше смысла, чем дополнительные вложенные представления. –

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