2015-06-12 3 views
2

У меня есть MVC-архитектура определенного вида в моем приложении. Теперь я хочу создать подкласс части View и Controller. Подкласс UIViewController загружен подклассом UIView из раскадровки. Как я могу сделать свой подкласс этого подкласса UIViewController моим подклассом кода подкласса UIView, когда он загружает его представление?Использование подкласса подкласса UIViewController с подклассом подкласса UIView

EDIT

Вот некоторые подробности о том, что я хочу сделать. В настоящее время у меня есть следующие классы:

ControlView 
ControlViewController 

которые связаны с раскадровкой. Я загружаю экземпляр ControlViewController с помощью:

self.storyboard!.instantiateViewControllerWithIdentifier("ControlViewController")! as! ControlViewController 

Теперь то, что я хочу сделать, это подкласс ControlView так, что я могу изменить некоторые ограничения и добавить несколько дополнительных подвидов. Назовем этот подкласс ExpandedControlView. Я также хочу подкласс ControlViewController, потому что я хочу добавить дополнительные действия от ExpandedControlView к контроллеру. Это можно назвать ExpandedControlViewController.

Тогда я хочу, чтобы иметь возможность создать экземпляр ExpandedControlViewController и использовать ExpandedControlView как ControlViewController бы с ControlView.

+0

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

+0

@PhillipMills Я добавил дополнительные данные, надеюсь, это поможет – Tometoyou

ответ

0

Внесите loadView в свой подкласс контроллера вида и установите свойство view в экземпляр вашего пользовательского подкласса вида.

1

В раскадровке выберите вид иерархии.

Select hierarchy view

Затем выберите вид вашего UIViewController в иерархии на левой стороне, и выберите класс этой точки зрения в инспекторе идентичности справа. Hierachy View

Или если вы хотите сделать это в коде. Переопределите viewDidLoad на ControlViewController, создайте экземпляр своего пользовательского представления и настройте свойство представления ControlViewController на свое собственное представление.

-(void)loadView{ 
    ControlView *myCustomView = [[ControlView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame]; 
    self.view = myCustomView; 
} 

Одно из предостережений при этом заключается в том, что расположение любых подзонов может измениться с момента вызова loadView. Поэтому, если у вас есть подчиненные элементы в своем пользовательском представлении, вы также должны переопределить layoutSubviews в своем пользовательском представлении и снова установить для него все свойства frameview вашего представления.

+0

Спасибо за подробный ответ! На самом деле я уже связал оригинальный подкласс UIView в раскадровке. Я пытаюсь создать подкласс этого подкласса UIView/UIViewController. Я обновил свой вопрос, чтобы попытаться сделать его более ясным, извините за любую путаницу. – Tometoyou

+0

Вы пробовали подход loadView? Если вы переопределите loadView на ControlViewController, как описано выше, тогда ControlViewController и его подкласс ExpandedControlViewController будут автоматически использовать ControlView в качестве своего вида при загрузке. – dave234

+0

Я попробую! Я действительно хочу, чтобы 'ExpandedControlViewController' использовал' ExpandedControlView' в качестве своего представления, а 'ControlViewController' -' ControlView'. Поэтому я предполагаю, что переопределю 'loadView' в' ExpandedControlViewController'. – Tometoyou