如何使用不同的 init 方法在 XIB 中创建自定义视图?
Posted
技术标签:
【中文标题】如何使用不同的 init 方法在 XIB 中创建自定义视图?【英文标题】:How can I create a custom view in XIB with different init method? 【发布时间】:2012-09-04 07:46:14 【问题描述】:我知道如何在 xib 中布局和创建 UIView, 但现在我有一个自定义视图(UIView 的子视图), 它有不同的初始化方法,例如:
-(id)initWithArg1:(int) arg2:(NSString *) arg3:(NSArray *) ...
或
+(id)viewWithArg1:(int) arg2:(NSString *) arg3:(NSArray *) ...
当我在 xib 属性栏中将视图的类设置为我的时, 我的自定义初始化方法没有出现,无处可设置。
那怎么办?非常感谢。
【问题讨论】:
【参考方案1】:您需要覆盖 initWithCoder:
并使用一些合理的默认值来完成指定的初始化程序正在执行的操作。
例如
- (id)initWithCoder:(NSCoder *)aDecoder
if (self = [super initWithCoder:aDecoder])
_value1 = 0;
_value2 = @"Hi!";
/* and so on */
return self;
【讨论】:
【参考方案2】:卡尔是正确的。
本质上,如果一个对象是从 XIB 实例化的(按照您在问题中提到的步骤),那么被调用的初始化程序是
- (id)initWithCoder:(NSCoder *)aDecoder;
您可以自己确认这一点,方法是覆盖所有可能的初始化程序并在所有初始化程序中放置断点以查看调用了哪个。
所以,如果您从 XIB 初始化,它暗示您将拥有该对象的一个实例(不一定如此);但是,如果您需要大量自定义对象的实例,那么您可能会考虑返回自定义初始化程序并通过以编程方式创建所有内容来放弃 XIB 工作。
本质上,想想你将如何使用这个对象。这将告诉您是否需要考虑以编程方式创建自己的视图的自定义初始化程序。
【讨论】:
是的,我认为它可以通过确认我认为您不需要在 xib 中设置init
方法,在其他地方您只需通过以下代码调用init
:
[[yourView alloc] initWithArg1:arg1 Arg2:arg2];
【讨论】:
那么他将如何在笔尖中使用他的视图?以上是关于如何使用不同的 init 方法在 XIB 中创建自定义视图?的主要内容,如果未能解决你的问题,请参考以下文章