Когда подпредставление удалено, удалите из суперпредставления - PullRequest
0 голосов
/ 07 августа 2011

Я пытаюсь сделать что-то очень похожее на Как узнать, когда удаляется подпредставление UIView

Я добавляю представление (A) как подпредставление, которое, в свою очередь, создает подпредставление (B) для себя. Чего он хочет:

Когда подпредставление А А удалено из А -> Удалить А из его суперпредставления.

Я создал подкласс UIView и попытался использовать - (void)willRemoveSubview:(UIView *)subview, который, в свою очередь, вызывает метод суперпредставления для удаления этого представления. Но это не работает, и я думаю, что это может быть потому, что B находится в процессе удаления.

Вышеуказанная ветка рекомендует использовать протоколы, которые я понимаю и уже использую в своем приложении, но в этом случае я не уверен, как его использовать, чтобы делать то, что я хочу, и не могу найти правильную ссылку в ресурсах Apple Dev .

Не могли бы вы помочь мне в использовании протокола и делегата для решения этой проблемы?

Спасибо

1 Ответ

4 голосов
/ 07 августа 2011

Это работает для меня:

- (void)willRemoveSubview:(UIView *)subview {
    [self removeFromSuperview];
}

Но если вы хотите использовать протокол и делегат, вы можете сделать это так:

CustomView.h

@class CustomView;

@protocol CustomViewDelegate <NSObject>
- (void)customViewIsReadyToRemove:(CustomView *)customView;
@end

@interface CustomView : UIView {
}
@property (nonatomic, assign) IBOutlet id <CustomViewDelegate> delegate;
@end

CustomView.m

@implementation CustomView
@synthesize delegate;

- (void)willRemoveSubview:(UIView *)subview {
    [self.delegate customViewIsReadyToRemove:self];
}
@end

ContainerView.h

@interface ContainerView : UIView {
}
@property (nonatomic, retain) IBOutlet UIView *customView;
@end

ContainerView.m

@implementation ContainerView
@synthesize customView;

- (void)dealloc {
    self.customView.delegate = nil;
    self.customView = nil;
    [super dealloc];
}

- (void)customViewIsReadyToRemove:(CustomView *)customView {
    [customView removeFromSuperview];
}
@end

В этом примере используются IBOutlets, поэтому вы можете использовать IB для подключения свойства контейнера customView и свойства delegate пользовательского представления.

...