Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在何处调用[self addSubView]?_Objective C_Ios_Cocoa Touch - Fatal编程技术网

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创建视图(容器和子视图)。没问题,如果它真的有帮助,您能接受吗?我接受了另一个答案,因为它提供了更多的“参考”代码。如果可以的话,我也会接受你的。