如何使用不同的init方法在XIB中创建自定义视图?

时间:2012-09-04 07:46:14

标签: objective-c ios xib

我知道如何在xib中布局和创建UIView,
但现在我有一个自定义视图(UIView的子视图),
它有不同的init方法,如:

-(id)initWithArg1:(int) arg2:(NSString *) arg3:(NSArray *) ...

+(id)viewWithArg1:(int) arg2:(NSString *) arg3:(NSArray *) ...

当我在xib属性栏中将视图的类设置为mine时,
我的自定义init方法没有出现,无处可设置。

那怎么样?非常感谢。

3 个答案:

答案 0 :(得分:1)

您需要覆盖initWithCoder:并使用一些合理的默认值来完成指定的初始化程序正在执行的操作。

e.g。

- (id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super initWithCoder:aDecoder]) {
        _value1 = 0;
        _value2 = @"Hi!";
        /* and so on */
    }

    return self;
}

答案 1 :(得分:0)

我认为您不需要在xib中设置init方法,在其他地方您只需按以下代码调用init

[[yourView alloc] initWithArg1:arg1 Arg2:arg2];

答案 2 :(得分:0)

卡尔是对的。

本质上,如果一个对象是从XIB实例化的(按照你在问题中提到的步骤),那么被调用的初始化是

- (id)initWithCoder:(NSCoder *)aDecoder;

您可以通过覆盖每个可能的初始化器并在所有初始化器中放置断点来确认这一点,以便查看哪个被称为。

所以,如果你是从XIB初始化那么暗示你将拥有该对象的一个​​实例(不一定如此);但是,如果您需要大量自定义对象的实例,那么您可以考虑返回自定义初始化程序并通过以编程方式创建所有内容来放弃XIB工作。

从本质上讲,想想你将如何使用这个对象。这将告诉您是否需要考虑以编程方式创建自己的视图的自定义初始化程序。