2012-10-12 44 views
0

我已经设计了一个很好的自定义控件CustomUIView作为UIview的子类,带有一个不错的初始化函数,它需要8个参数。我将它作为指定的初始化程序来确保,任何用户都将正确提供所有8个参数。 几天后,我想在不同的使用笔尖的项目中重新使用该控件。 我添加了一个基本的UIView到其中一个NIB的画布中,并将Custom类选项更改为我的CustomUIView类。但我立即意识到我的初始化器没有用,因为它根本没有被调用。自定义可可触摸控制和初始化

你会对此建议做什么?我想确保

  1. 所有的参数都采取了,但在同一时间
  2. 我想在IB的自定义控制的基本定位。
+0

8参数!?你确定没有任何办法可以将它压平并使它们成为所有物业? – CodaFi

+0

我发誓,没有。所有8个都很重要。没有回答任何问题,就不可能构建这种控制。 我无法避免这种情况,我需要强制该类的任何用户提供配置。 –

+0

那么,为什么不将新项目中的类从NIBs解码为代码呢? – CodaFi

回答

1

为什么不建立在用于NIB的标准UIViewController初始化程序之上呢?

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle parameter1:(id)param1... 
    NSAssert(param1 != nil && param2 != nil ...); 
    if (self = [super initWithNibName:nibName bundle:nibBundle]) { 
     //Custom initializations here. 
    } 
    return self; 
} 
+0

如何强制在初始化时提供所有配置参数?有内部默认参数是没有意义的,我想强制任何开发人员将重新使用该控件,将看到有什么配置。 该控件根本没有公共属性。 –

+0

你在说什么?通过使这是唯一可以工作的初始化程序,实际上,可以将其作为默认初始化程序(除此之外,它应该在任何框架头文件中明确标记默认初始化程序是什么)。如果你不想要公共财产,这是你的机会。在类扩展中声明一些私有属性,并将它们的值设置为给定的参数。如果您确实想要将其作为默认值强制执行,请从其他初始值设定项返回nil。 – CodaFi

+0

什么是不可理解的事实,我想迫使开发者提供一切!在自定义控件初始化期间的配置数据,我希望确保除非他提供它,没有自定义控件,并且开发人员不必研究该控件的所有可能属性,而是要给他舒适的体验,因此自定义的初始化程序? 而另一个要求是这个自定义控件作为IB中的UIView添加到任何其他项目中,自定义类选项更改为Identity inspector中的UICustomClass? –