iosobjective-cuiviewiboutletawakefromnib

Initialising view controller with IBOutlets to custom views


I am trying to find a way to initialise a view controller which has IBOutlets to a custom view that I have created in a XIB.

Here is the code where I initialise my class:

MyContentViewController *pageContentViewController = [[MyContentViewController alloc] init];
self.pageContent = pageContentViewController;
[pageContentViewController view];

MyContentViewController has the following properties:

 @interface MyContentViewController : UIViewController

 @property (nonatomic, weak) IBOutlet MyContentView *topLeftView;
 @property (nonatomic, weak) IBOutlet MyContentView *topRightView;
 @property (nonatomic, weak) IBOutlet MyContentView *bottomLeftView;
 @property (nonatomic, weak) IBOutlet MyContentView *bottomRightView;

In MyContentViewController xib I have 4 views which I have set as MyContentView and have hooked the IBOutlet's above to the views in the storyboard.

enter image description here

The custom view is defined as following:

#import <UIKit/UIKit.h>

@interface MyContentView : UIView

@property (nonatomic, strong) IBOutlet UILabel *labelView;

 @end

However when I run the application, I get the 4 views I have added in the MyContentViewController xib. However none of them display the UILabel from the custom UIView.

I have added the following in MyContentView:

- (void)awakeFromNib {
    NSLog(@"VIEW AWAKE");
}

This get printed out so the views are being loaded. However how can I get them to display using the 4 IBOutlets.

Here is a picture of the app running with the view. There is no labels on the 4 views: enter image description here


Solution

  • I see that your "MyContentView" has a nib of it's own. Loading a custom UIView class which has a nib layout from another nib is a bit more complex.

    I think this blog post contains the answer