Добраться до UIViewController из UIView? - PullRequest
177 голосов
/ 27 августа 2009

Есть ли встроенный способ получить от UIView до UIViewController? Я знаю, что вы можете перейти от UIViewController к UIView через [self view], но мне было интересно, есть ли обратная ссылка?

Ответы [ 25 ]

0 голосов
/ 25 октября 2012

Другим простым способом является создание собственного класса представления и добавление свойства контроллера представления в классе представления. Обычно контроллер представления создает представление, и именно здесь контроллер может установить для себя свойство. По сути, это вместо того, чтобы искать (с небольшим взломом) контроллер, иметь контроллер для установки себя на представление - это просто, но имеет смысл, поскольку именно контроллер «контролирует» представление.

0 голосов
/ 09 марта 2010

Мое решение, вероятно, будет считаться фальшивым, но у меня была похожая ситуация с mayoneez (я хотел переключать представления в ответ на жест в EAGLView), и я получил контроллер представления EAGL следующим образом:

EAGLViewController *vc = ((EAGLAppDelegate*)[[UIApplication sharedApplication] delegate]).viewController;
0 голосов
/ 12 мая 2011

Я думаю, что есть случай, когда наблюдателю необходимо сообщить наблюдателю.

Я вижу аналогичную проблему, когда UIView в UIViewController реагирует на ситуацию, и ему нужно сначала сказать своему родительскому контроллеру представления скрыть кнопку назад, а затем по завершении сказать родительскому контроллеру представления, что ему нужно отключиться. стек.

Я пробовал это с делегатами, но безуспешно.

Я не понимаю, почему это должно быть плохой идеей?

0 голосов
/ 06 февраля 2015

Если вашим rootViewController является UINavigationViewController, который был установлен в классе AppDelegate, тогда

    + (UIViewController *) getNearestViewController:(Class) c {
NSArray *arrVc = [[[[UIApplication sharedApplication] keyWindow] rootViewController] childViewControllers];

for (UIViewController *v in arrVc)
{
    if ([v isKindOfClass:c])
    {
        return v;
    }
}

return nil;}

Где c требуется класс контроллеров представления.

ИСПОЛЬЗОВАНИЕ:

     RequiredViewController* rvc = [Utilities getNearestViewController:[RequiredViewController class]];
0 голосов
/ 27 августа 2009

Нет пути.

Что я делаю, это передаю указатель UIViewController в UIView (или соответствующее наследование). Извините, я не могу помочь с подходом IB к проблеме, потому что я не верю в IB.

Чтобы ответить первому комментатору: иногда вам нужно знать, кто вам звонил, потому что это определяет, что вы можете сделать. Например, для базы данных вы можете иметь только права на чтение или чтение / запись ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...