删除子视图后,从superview中删除

时间:2011-08-06 22:22:11

标签: iphone objective-c ios uiview protocols

我正在尝试做一些与How to tell when a subView is removed a UIView

非常相似的事情

我添加了一个视图(A)作为子视图,这又为自己创建了一个子视图(B)。它想要什么:

当A的子视图B从A中删除时 - >从它的超级视图中删除A.

我已经将UIView子类化并尝试使用- (void)willRemoveSubview:(UIView *)subview,而{{1}}依次调用superview上的方法来删除此视图。但它不起作用,我认为可能是因为B正在被删除。

以上主题建议使用我已经理解并在我的应用程序中使用的协议,但在这种情况下,我不知道如何使用它来做我想要的,并且无法在Apple Dev资源中找到正确的引用

你能帮我使用协议吗?委托解决这个问题?

由于

1 个答案:

答案 0 :(得分:4)

这对我有用:

- (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属性。