Поскольку это был принятый ответ в течение долгого времени, я чувствую, что мне нужно исправить его с лучшим ответом.
Некоторые комментарии по необходимости:
- Вашему представлению не требуется прямой доступ к контроллеру представления.
- Вместо этого представление должно быть независимым от контроллера представления и иметь возможность работать в разных контекстах.
- Если вам необходимо, чтобы представление взаимодействовало с контроллером представления, рекомендуемый способ и то, что Apple делает через Какао, это использование шаблона делегата.
Ниже приведен пример того, как его реализовать:
@protocol MyViewDelegate < NSObject >
- (void)viewActionHappened;
@end
@interface MyView : UIView
@property (nonatomic, assign) MyViewDelegate delegate;
@end
@interface MyViewController < MyViewDelegate >
@end
Представление взаимодействует с его делегатом (как, например, UITableView
), и ему все равно, реализовано ли оно в контроллере представления или в каком-либо другом классе, который вы в конечном итоге используете.
Мой оригинальный ответ следующий: Я не рекомендую этого, так же как и остальные ответы, где прямой доступ к контроллеру представления достигнут
Нет встроенного способа сделать это. Хотя вы можете обойти это, добавив IBOutlet
на UIView
и подключив их в Интерфейсном Разработчике, это не рекомендуется. Представление не должно знать о контроллере представления. Вместо этого вам следует поступить так, как предлагает @Phil M, и создать протокол для использования в качестве делегата.