Расскажите UIViewController о том, что произошло в подпредставлении - PullRequest
1 голос
/ 20 октября 2011

У меня есть UIViewController с UIView в качестве подпредставления.Я бы хотел, чтобы UIViewController был уведомлен (или прослушал) определенные действия в UIView. Какой стандартный способ сделать это?

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

Исходя из вашего ответа на комментарий выше, что это нажатие кнопки, «стандартным» способом будет использование механизмов в UIControl. Так, программно, если вы делаете

[myButton addTarget:myViewController action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

Нажатие «myButton» приведет к выполнению метода «buttonPressed:» в myViewController. Вы также можете использовать Interface Builder для установления соединений.

Этот код может быть помещен в несколько различных мест (в UIView, в UIViewController), и, в результате, точное имя переменных изменится, но, для обработки нажатой кнопки, это, вероятно, Самый простой способ.

2 голосов
/ 20 октября 2011

Если вы просто хотите иметь обработчик действий:

- (void)viewDidLoad {
    [super viewDidLoad];
    // ......
    UIButton *myButton = [[UIButton alloc] init]; // or initWithSOMETHING
    [myButton addTarget:self action:@selector(someMethod:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:myButton];
    [myButton release];
    // ......
}

- (void)someMethod:(id)sender {
    if (![sender isKindOfClass:[UIButton class]]) return;
    // Do something about the action here...
}

Для получения дополнительной информации см. Документацию UIControl :

Подготовка и отправка сообщений о действиях

– sendAction:to:forEvent:
– sendActionsForControlEvents:
– addTarget:action:forControlEvents:
– removeTarget:action:forControlEvents:
– actionsForTarget:forControlEvent:
– allTargets
– allControlEvents

Или, если вы говорите о контроллере представления, вызывающем родительский контроллер представления, вы можете использовать свойство presentingViewController UIViewController для доступа к «родительскому» контроллеру представления:

UIViewController *parentVC = [self presentingViewController];
[parentVC setSomething:self.withSomething];

presentingViewController - Контроллер представления, который представил этот контроллер представления. (Только для чтения)

@property(nonatomic, readonly) UIViewController *presentingViewController

Обсуждение
Реализация этого свойства по умолчанию идет вверх по представлению иерархия, начиная с этого представления контроллера. Первый вид Контроллер находит, что получил presentViewController:animated:completion: метод, или у которого есть свой definesPresentationContext свойство, установленное на YES, возвращается как стоимость имущества. Он продолжает идти вверх по иерархии, пока не находит значение для возврата или оно попадает в корневой контроллер представления.


Или superview свойство UIView:

[self.view.superview doSomething];

superview - супервизор получателя или ноль, если его нет. (Только для чтения)
@property(nonatomic, readonly) UIView *superview

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