在IOS中将UIView添加到另一个UIView两次会发生什么?

时间:2011-12-15 15:07:48

标签: ios uiview

在iOS中将UIView添加到另一个视图两次会发生什么?我相信它不会被添加两次。有人试过吗?

3 个答案:

答案 0 :(得分:16)

[UIView addSubview:]文档

  

视图只能有一个超级视图。如果视图已经具有超视图并且该视图不是接收者,则此方法会在使接收器成为新的超级视图之前删除先前的超视图。

答案 1 :(得分:1)

视图只能有一个父视图。但是一个视图可以有很多子视图。

阅读UIView.

的文档

具体阅读 addSubView

答案 2 :(得分:0)

也许您分配了两次UIView,但旧对象已被superView保留。

例如

UIView *viewA = [UIView new];
[superView addSubview:viewA];
viewA = [UIView new]; //there is a new object.
[superView addSubView:viewA];

另一个示例,同时实现initinitWithFrame方法。

@interface MyView : UIView
@property (strong, nonatomic) UIView *subView;
@end

@implement MyView
- (instancetype)init {
    self = [super init];
    if (self) {
        self.subView = [UIView new];
        [self addSubview:self.subView];
    }
    return self;
}

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        self.subView = [UIView new];
        [self addSubview:self.subView];
    }
    return self;
}
@end

//init will call initWithFrame with CGRectZero automatically, subView alloced twice.
MyView myView = [[MyView alloc] init];