Как получить UIViewController из UIView с помощью кода [дубликат]
На этот вопрос уже есть ответ здесь:
- добраться до UIViewController из UIView? 24 ответов
Есть способ получить ссылку на контроллер вида из объекта UIView
? Мне нужно что-то вроде этого:
MyParentViewController *myParentViewController = [self.view.superview controller];
5 ответов:
Для этого можно использовать метод
-nextResponder
. Согласно http://developer.apple.com/library/ios/documentation/uikit/reference/UIResponder_Class/Reference/Reference.html#//apple_ref/occ/instm/UIResponder/nextResponder, "UIView реализует этот метод, возвращая объект UIViewController, который управляет им (если он есть) или его superview (если его нет)"
По умолчанию UIView не имеет ссылки на UIViewController.Вы можете добавить его в свой подкласс UIView и установить его при создании UIView в UIViewController.
Если вы ищете родителя viewcontroller, каждый UIViewController имеет свойство
parentViewController
, но если вы хотите получить доступ к нему из UIView, вам нужно сначала добраться до вашего UIViewController.Вы можете посмотреть пример, как создать ссылку на ваш UIViewController в вашем подклассе UIView и как / где установить это в Руководство по программированию контроллера вида для iPhone , см. раздел Создание представления программно в определение пользовательского класса контроллера вида, Вот пример, для более подробной информации смотрите связанный пример метронома.
- (void)loadView { self.wantsFullScreenLayout = YES; MetronomeView *view = [[MetronomeView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]; view.metronomeViewController = self; self.view = view; self.metronomeView = view; [view release]; }
В заголовке:
@interface MetronomeView : UIView { MetronomeViewController *metronomeViewController; ...
Вы можете использовать
[(MyParentViewController *)[[self.view superview] nextResponder] doSomething];