2013-08-09 2 views
0

(Это является продолжением моей предыдущей вопрос: How to accomplish a "90% slide" between two UIViews)навигации в пределах частично показано UIView

Текущее состояние:

В фоновом режиме, у меня есть контроллер представления контейнера, который управляет двумя отдельными UIViews (и их соответствующие UIViewControllers), сдвинув их "в и" по мере необходимости:

enter image description here

Благодаря рекомендации от @rdelmar, Теперь у меня это работает.

Проблема:

Вот мой следующий вопрос: Я хотел бы вторичный вид (желтый выше), чтобы быть «судоходный» - то есть, я хотел бы иметь UITableView выбираемых элементов, которые, когда потрогать, показывают различные UIView в этой нижней рамы:

enter image description here

Мои мысли:

Я рассмотрел вопрос о внедрении контроллера UINavigationView в этот нижний фрейм для обработки такого вида навигации, но я узнал (через несколько источников, таких как iPhone UINavigationController inside UIViewController), что нельзя «внедрять» функциональность UINavigationController внутри существующего UIView - он предназначен для принятия по всему экрану.

Итак, если UINavigationController отсутствует (и вы можете сказать мне, действительно ли это, или если мои вышеуказанные выводы неверны), похоже, что мне осталось вручную создать иерархию, эти UIViews вводят и оставляют нижний фрейм. Это не самая худшая вещь в мире, но это жалит, когда я думаю о UINavigationController, предлагающем это бесплатно.

Как всегда, ваши мысли очень ценятся. Благодаря!

+0

Просмотр иерархии и иерархии диспетчера просмотров - это разные вещи. Вы уверены, что просто хотите переключить виды? Если это так, нет необходимости встраивать навигатор в представление. Например, transitionFromView и его варианты. –

+0

@NiravBhatt - хороший вопрос: я предполагаю, что * каждый * вид в этом нижнем фрейме управляется одним и тем же UIViewController. Итак, чтобы ответить на ваш вопрос, я думаю, что мы говорим о «иерархии представлений», а не о «иерархии диспетчера представлений» - да? – ABach

+0

Да, подумайте о различии с точки зрения диспетчера представлений: все контроллеры представлений предоставляют больше места для размещения ваших представлений/элементов управления и дополнительный класс, который обеспечит платформу для жизненного цикла вашего представления. Вам нужны эти функции? Например, вам нравится напоминать, когда ваш просмотр загружен, появился на экране и т. Д.? Если да, дайте этому представлению собственный контроллер вида. И, конечно же, вам нужен VC для обработки определенных типов переходов, таких как всплывающие окна и т. Д., Хотя я не знаю никаких настроек, которые позволяют это без отдельного VC. –

ответ

2

UINavigationController, конечно, не из :)

Вы говорите

У меня есть контроллер представления контейнера, который управляет двумя отдельными UIViews (и их соответствующие UIViewControllers)

Это лишь малая перейдите к использованию контроллера навигации здесь.

Вместо добавления нижнего UIViewController, добавьте UINavigationController с UIViewController в качестве контроллера корневого вида.

т.е. вместо

// If 'small' is the name of your smaller view controller 
[self addChildViewController:small]; 
[self.view addSubview:small.view]; 

сделать

UINavigationController *n = [UINavigationController alloc] initWithRootViewController:small]; 
n.view.frame = small.frame; 
[self addChildViewController:n]; 

[self.view addSubview:n.view]; 

Теперь вы можете нажать и попы новых контроллеров вида на/от нижней части вашего приложения.

Я сделал это сейчас в нескольких приложениях (iOS 5 и выше) и не сталкивался с какими-либо проблемами.

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

+0

Это сделало трюк. Большое спасибо! – ABach

0

Я бы предложил установить контроллер корневого представления на ваш UINavigationController и просто наложить вид редуктора сверху в качестве дочернего элемента UINavigationController. Вы можете использовать insertSubview: aboveSubview: для этого.

Это упростит вам многое, поскольку ядром вашей функциональности должен быть контроллер корневого представления.

Использование UINavigationController является очень предпочтительным, поскольку вы получаете бесплатную анимацию и логику стекирования.

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