10

In order to initialize a view that has xib, I use initWithCoder function. But what if I need to initialize the xib with custom parameter.

I need something like this:

- (id)initWithCoder:(NSCoder *)aDecoder
           andTitle:(NSString *)titleString
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.titleLabel = titleString;
    }
    return self;
}

And when do I call it? After awakeFromNib?

Stavash
  • 14,244
  • 5
  • 52
  • 80
Luda
  • 7,282
  • 12
  • 79
  • 139

2 Answers2

11

You can't modify the initWithCoder: method like that because the method is defined in a protocol you don't control. Instead you need to either call the setTitle: method after the object has been created, possibly in awakeFromNib, or from the owning controller.

Wain
  • 118,658
  • 15
  • 128
  • 151
9

You don't call initWithCoder yourself, usually, so you can't pass custom parameters to it. That method would be called by the nib loading mechanism and you don't have control over it.

You certainly wouldn't call it from awakeFromNib - the object would already have been initialised by that point so you couldn't re-call it.

The simplest solution is to expose your custom parameters as properties and just set them after you've created the view.

jrturton
  • 118,105
  • 32
  • 252
  • 268
  • 1
    Agreed, I sure wish I could create a custom init method to pass along parameters so it happens all in one go. – Michael Campsall Jan 24 '14 at 19:55
  • What about Swift ... if i want to pass my custom properties in initwithcoder method which i would like to declare as let .... how can i do that ? – Mihir Mehta Dec 10 '15 at 10:59