Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Initializing a view with custom initWithCoder

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?

like image 371
Luda Avatar asked Aug 04 '13 11:08

Luda


2 Answers

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.

like image 197
Wain Avatar answered Oct 12 '22 14:10

Wain


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.

like image 25
jrturton Avatar answered Oct 12 '22 13:10

jrturton