Get to UIViewController from UIView?
cocoa-touch, ios, objective-c, uiview, uiviewcontroller
Solution
Since this has been the accepted answer for a long time, I feel I need to rectify it with a better answer.
Some comments on the need:
- Your view should not need to access the view controller directly.
- The view should instead be independent of the view controller, and be able to work in different contexts.
- Should you need the view to interface in a way with the view controller, the recommended way, and what Apple does across Cocoa is to use the delegate pattern.
An example of how to implement it follows:
@protocol MyViewDelegate < NSObject >
- (void)viewActionHappened;
@end
@interface MyView : UIView
@property (nonatomic, assign) MyViewDelegate delegate;
@end
@interface MyViewController < MyViewDelegate >
@end
The view interfaces with its delegate (as `UITableView` does, for instance) and it doesn't care if its implemented in the view controller or in any other class that you end up using.
My original answer follows: I don't recommend this, neither the rest of the answers where direct access to the view controller is achieved
There is no built-in way to do it. While you can get around it by adding a `IBOutlet` on the `UIView` and connecting these in Interface Builder, this is not recommended. The view should not know about the view controller. Instead, you should do as @Phil M suggests and create a protocol to be used as the delegate.
Problem
Is there a built-in way to get from a `UIView` to its `UIViewController`? I know you can get from `UIViewController` to its `UIView` via `[self view]` but I was wondering if there is a reverse reference?