2009-06-22 3 views
2

Я использую UITableViewController для меню в игре. В представлении таблицы открывается контроллер вида для моего настраиваемого UIView, который показывает игру. Когда игра заканчивается, UIView уведомляется (что по-своему разрушает участников MVC), и оттуда я немного потерян.Когда я открываю пользовательский UIView из UITableViewController, как закрыть пользовательский вид и вернуться к представлению таблицы?

Вопросы:

  1. Может UIView общаться с контроллером? Как?
  2. Может ли один контроллер поговорить с тем, кто его начал? Как?
  3. Как легко переходить между всеми этими сложными сетями просмотров и контроллеров?
+0

Что я сделал в конце: Создайте «игровой контроллер» со всеми игровыми действиями. Создайте контроллер вида, который наследуется от игрового контроллера. После инициализации установите родительский вид представления в контроллер вида. – Mikle

ответ

2
  1. Используйте протокол делегата здесь. Ваша пользовательская игра UIView может использовать свойство delegate и методы вызова для этого делегата, когда происходят события (игра завершена, приостановлена ​​игра, просмотр закрыт и т. Д.). Вот отличный пост по использованию делегатов: How do I create delegates in Objective-C?

  2. Я бы рекомендовал использовать UINavigationController. Вам необязательно отображать навигационную панель, но если вы устанавливаете контроллеры своего вида в контроллере навигации, у вас есть доступ к -pushViewControllerAnimated: и -popViewControllerAnimated:, что делает его очень простым для навигации между уровнями вложенных контроллеров представлений.

  3. Еще одно преимущество UINavigationController - вы сможете получить слайд-анимацию при переключении между видами.

Существуют и другие механизмы третьих сторон, что там вы можете предпочесть более механизмов UIKit UINavigationController/UIViewController. Проверьте Three20 project, в частности класс TTNavigationCenter.

+0

Хммм, мне кажется, что мне нужно что-то еще глубже, чтобы понять, почему UIView не имеет поля родителя/контроллера, и как это сделать ** right **, а не довольно. – Mikle

+0

Я думаю, что идея делегата является правильной для первого вопроса, и это самый распространенный способ передачи сообщений из UIView без нарушения MVC слишком сильно. Идея навигационного контроллера также хороша - контроллер навигации в основном представляет собой стек контроллеров, поэтому каждый контроллер имеет смысл своего «родительского» контроллера. Этот ответ, кажется, подходит очень хорошо, и в том смысле, что он делает вещи «правильно» и что-то делает «красиво». +1 – Tim

+0

Кроме того, UIView не имеет родительского/контрольного поля, потому что UIView не обязательно должен иметь контроллер. Он может иметь супервизор, который является свойством объекта view. – Tim

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