Objective c 在何处调用[self addSubView]?
我有一个自定义视图,需要以编程方式向其中添加两个子视图。创建和添加这些子视图的最佳位置是哪里?说: 如果视图类管理一个或多个子视图,请执行以下操作:在视图的初始化序列中创建这些子视图 这对我来说有点不清楚。我应该在Objective c 在何处调用[self addSubView]?,objective-c,ios,cocoa-touch,Objective C,Ios,Cocoa Touch,我有一个自定义视图,需要以编程方式向其中添加两个子视图。创建和添加这些子视图的最佳位置是哪里?说: 如果视图类管理一个或多个子视图,请执行以下操作:在视图的初始化序列中创建这些子视图 这对我来说有点不清楚。我应该在initWithFrame、initWithCoder或其他地方处理这个问题吗 请注意,这里我不是在谈论控制器,这是一个需要自己初始化的视图。通常,如果您想始终显示视图,您应该创建视图,并且在viewdidload/ViewWill中显示父视图控制器的[self addSubView]
initWithFrame
、initWithCoder
或其他地方处理这个问题吗
请注意,这里我不是在谈论控制器,这是一个需要自己初始化的视图。通常,如果您想始终显示视图,您应该创建视图,并且在viewdidload/ViewWill中显示父视图控制器的[self addSubView]。您也可以将其设置为隐藏,如果您使用。在其他一些场景中,如要在单击按钮或其他操作时显示视图,则应相应地添加子视图。通过积分,它们意味着重要或巨大。viewDidLoad工作得很好,但是对于真正大的或重要的东西,初始化方法是最好的选择。
initWithFrame
是以编程方式创建UIView的方法,而当UIView从XIB实例化时调用initWithCoder
因此,这完全取决于如何创建包含视图。
覆盖所有情况的方法:
- (id) initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame])){
[self setUpSubViews];
}
return self;
}
- (id) initWithCoder:(NSCoder*)aDecoder
{
if ((self = [super initWithCoder:aDecoder])){
[self setUpSubViews];//same setupv for both Methods
}
return self;
}
- (void) setUpSubViews
{
//here create your subviews hierarchy
}
执行以下操作:采用方法,以视图中指定的初始值设定项为准。也就是说,它是最可配置(即大多数参数)的初始化。。。方法,每个其他初始值设定项调用该方法。例如,它可以是-initWithFrame:,这是最常见的。然后按如下方式实现此方法:
- (id) initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
// add new views here, for example:
UIImageView *imageView = [[UIImageView alloc] initWithImage:anImage];
[self addSubview:imageView];
[imageView release];
}
return self;
}
请仔细阅读!他所说的视图需要创建/添加自己的子视图。这与视图控制器完全无关!另一种方法是从单个NIB创建视图(容器和子视图)。没问题,如果它真的有帮助,您能接受吗?我接受了另一个答案,因为它提供了更多的“参考”代码。如果可以的话,我也会接受你的。