Где обрабатывать событие подпредставления UIApplication

Изучая UIApplication, я нашел способ добавить представление поверх всех UIViewController.

  UIView *testView =  [[UIView alloc] initWithFrame:CGRectMake(40,40,250,250)];
    [testView setBackgroundColor:[UIColor redColor]];

    [[[UIApplication sharedApplication] keyWindow] addSubview:testView];

Он отображается правильно.

Мне интересно, создал ли я меню с некоторыми кнопками вместо testView. Где я могу обрабатывать эти события в AppDelegate или Current ViewController?

If it is possible тогда скажите мне, как change text of any ViewController нажать кнопку меню.

Я имею в виду, как получить контекст другого ViewController и установить его свойство View с помощью этой кнопки.


person AndroidGeek    schedule 13.11.2014    source источник


Ответы (2)


Да, это возможно. Вы можете добавить кнопку и установить события ее действия. Затем вы можете добавить Observer, используя NSNotificationCenter. Затем вы можете получить уведомление о нажатии кнопки в любом UIViewController, которое вы хотите.

Вот код:

добавить такую ​​кнопку:

UIButton *button =  [[UIButton alloc] initWithFrame:CGRectMake(40,40,250,250)];
[[[UIApplication sharedApplication] keyWindow] addSubview:button];
[button addTarget:self 
             action:@selector(doSomething) 
   forControlEvents:UIControlEventTouchUpInside];

Опубликовать уведомление в обработчике события кнопки:

- (void)doSomething {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"buttonClicked" object:nil];
}

Получите уведомление в другом ViewController:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(yourmethod) name:@"buttonClicked" object:nil];

Затем в «вашем методе» вы можете изменить текст.

person Unnati    schedule 13.11.2014

Это очень плохая идея — добавлять подвиды в keyWindow и после этого извлекать текущие viewControllers. Вероятно, вы сделаете ад. (До iOS8 окна не меняли границы и ориентацию, теперь они меняются)

Вместо этого создайте подкласс вашего корневого навигационного контроллера.
Добавьте подвиды в self.view и получите активный контроллер через [self.viewControllers lastObject]

person l0gg3r    schedule 13.11.2014