Cannot create outlet connections to subviews in Interface Builder (Xcode 5)

You can manually write the IBOutlet property declaration in the @interface of the custom view subclass, and assuming you've defined the base class of your subview in IB, then you can drag from the outlet circle in the code back to the control in the scene.

enter image description here

Or, as you point out, Warren Burton suggested both this technique and another in his answer to this other question, Can't Wire to Subview in IB.


The issue has to do with the File Owner of the View Controller. It is probably set up as being IOViewController, thus you can only make property connections in that .h file.

What you can do, is create another .nib file for the subview and put the subview in there. Then in that .nib file, make the file owner IOSubview. Property connections will work just fine there. Then just add the subview to your IOViewController programatically. Just remember to load the nib file from bundle first.


This is what I did (in Swift):

  • I Created a new ViewController (e.g. class MyViewController: UIViewController {})
  • In StoryBoard, I expanded the 'Scenes' (i.e. the tree view of all UI components) and selected 'MyViewController'
  • Using the 'identity inspector' I assigned the 'MyViewController' class (as oppose to the default UIViewController)

After that I was able to assign an action.

I suspect that for Obj-C it is similar process.


You don't create outlets in the subclass, you create the outlet on the view controller it is on. You need to #import the subclass into IDViewController.h and create an outlet there.

IDViewController.h

#import "IDSubclass.h"
...
@property (strong, nonatomic) IBOutlet IDSubclass *outletName;