2013-08-04 36 views
10

为了初始化具有xib的视图,我使用initWithCoder函数。但是如果我需要用自定义参数初始化xib会怎么样。使用自定义initWithCoder初始化视图

我需要的是这样的:

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

而当我把它? awakeFromNib之后?

回答

11

您不能修改initWithCoder:这样的方法,因为该方法是在您不控制的协议中定义的。相反,您需要在对象创建完成后调用setTitle:方法,或者在awakeFromNib或拥有的控制器中调用setTitle:方法。

+0

您不会在awakeFromNib中设置自定义字段 – Chisx

+0

@SÄN为什么您不要在awakeFromNib中设置标签的文本? – Wain

9

您通常不会自己调用initWithCoder,因此您无法将自定义参数传递给它。该方法将由nib加载机制调用,并且您无法控制它。

你当然不会从awakeFromNib调用它 - 该对象已经被该点初始化,所以你不能重新调用它。

最简单的解决方案是将您的自定义参数作为属性公开,并在创建视图后将其设置。

+1

同意,我当然希望我可以创建一个自定义的初始化方法来传递参数,所以它一次性发生。 –

+0

Swift怎么样...如果我想在initwithcoder方法中传递我的自定义属性,我想声明为let ....我怎么做? –

相关问题