2010-06-13 4 views
0

Я создаю пользовательский UINavigationController (не подклассифицируя его, я подкласса UIViewController для этого), я хотел бы иметь экземпляры UIViewController, которые добавляются в мой пользовательский диспетчер навигации, чтобы получить ссылку на пользовательский контроллер навигации, когда они обращаются к себе .navigationController. Т.е.Изменение значения UIViewControllers self.navigationController?

Вы бы, от UIViewController, которые принадлежат к UINavigationController, делают это, чтобы подтолкнуть новый контроллер представления в стек:

MyViewController *myVC = [[MyViewController alloc] init]; 
[self.navigationController pushViewController:myVC animated:YES]; 
[myVC release]; 

Я хотел бы, чтобы имитировать это поведение. Предпочтительно по шаблону проектирования, который не включает добавление кода в UIViewController, он сам. Итак, в приведенном выше случае, когда пользовательский контроллер навигации получает к нему контроллер, он будет в методе pushViewController настраивать navigationController на пользовательский контроллер (он сам), так что когда новый добавленный контроллер представлений сам .navigationController также получит ссылку на пользовательский навигатор.

Есть несколько вовлеченных проблем. Несмотря на то, что добавленный viewController отображается настраиваемым навигационным контроллером, [self parentViewController] не работает при подклассификации UIViewController. Если бы это сделало я мог просто пойти

[[self parentViewController] pushViewController...

из моего добавленного UIViewController.

self.navigationController предназначен только для чтения, поэтому я не могу установить его вручную, и даже если бы мог, мне пришлось бы установить его на [self parentViewController], к которому я не могу добраться.

Я планировал создать категорию на UIViewController (мой проект будет использовать только пользовательский navigationController, поэтому никаких шансов на столкновение не произойдет). Но его подход затрагивает проблему, упомянутую выше, я не могу получить ссылку на пользовательский UINavigationController, владеющий нажатым UIViewController, изнутри этих добавленных контроллеров. Мне нужно было бы создавать протоколы и настраивать CustomNavigationController как делегат на каждом из UIViewControllers, тем самым сильно связывая его и делая эти UIViewControllers только функциями с моим пользовательским Nav-контроллером.

Надеюсь, что ясно, чего я пытаюсь достичь, мне нужно еще несколько образцов шаблонов проектирования в Objective C, чтобы увидеть это один самостоятельно.

Спасибо за любую помощь/рекомендуем данный :)

ответ

0

Я не знаю, если вы поняли это, но я боролся с той же проблемой, я думаю. Например. приложение iPad с открытым доступом по умолчанию имеет RootViewController (для всплывающего окна) и DetailViewController, который имеет представление под всплывающим окном или в правом представлении справа, когда iPad наклонен (пейзаж). Я хочу выбрать из всплывающих окон и управлять отдельными контроллерами, которые заполняют подробный вид на основе выбора RootViewController. Я еще не понял этого. Если у вас есть какие-либо идеи, пишите. Я сделаю то же самое, если найду здесь какие-нибудь отличные проекты.

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