I created a custom view. It has a delegate that it will notify when some of its buttons are pressed.
I added this to the view controller’s viewDidLoad:
self.myCustomView.delegate=self;
So far everything works fine.
But that’s not cool enough. I want to do it the table view style where I can just right drag from the view to the File’s Owner and (ta-da!) it’s automatically set.
Add the
IBOutletkeyword to thedelegateproperty of your class:The
IBOutletkeyword tells the nib editor to let you make a connection to that property.You could also say this:
And then IB will only allow you to connect it to a
MyView. But a protocol or id is more flexible.EDIT: One point has been lost due to focus on IB
You said:
Receiving button events is the role of a view controller, sometimes however a delegate will be used for finer grained control of certain events.
In general dont create a delegate for button presses on a view that is a primary window in which case you should be handling your button events in a ViewController. Buttons sit on a parent view that will forward events up the responder chain (you still need to connect them to a target). Im not saying you shouldn’t ever use the delegate pattern for button presses but, buttons have their own connections to view controllers in IB with drag and drop as you wish. But there are situations like yours which are perfectly valid.