Что происходит, когда UIView добавляется в другой UIView дважды в IOS? - PullRequest
8 голосов
/ 15 декабря 2011

Что происходит, когда UIView добавляется в другое представление дважды в iOS?Я верю, что это не будет добавлено дважды.Кто нибудь пробовал?

Ответы [ 3 ]

16 голосов
/ 15 декабря 2011

[UIView addSubview:] документация

Представления могут иметь только одно суперпредставление.Если представление уже имеет суперпредставление и это представление не является получателем, этот метод удаляет предыдущее суперпредставление перед тем, как сделать получателя его новым суперпредставлением.

1 голос
/ 15 декабря 2011

Представление может иметь только одно родительское представление.Но представление может иметь много подпредставлений.

Прочитать документацию UIView.

Специально прочитать о addSubView

0 голосов
/ 08 ноября 2018

Возможно, вы дважды использовали UIView, старый объект был сохранен superView.

например

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

другой пример, когда реализуются оба метода init и initWithFrame.

@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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...