我向UIViewController添加了一个自定义UIView,在视图中的一些代码之后,我想从UIViewController中删除这个视图,但是我不知道如何通知UIViewController UIView的删除。
我正在使用此方法退出UIView
-(void)exit{
[self removeFromSuperview];
}
我需要设置一个监听器吗?任何帮助表示赞赏
我发布了详细的解决方案。谢谢Rage,Bill L和FreeNickname
答案 0 :(得分:3)
使用委托。将协议添加到自定义View,该协议实现了一种通知删除子视图的方法。
在添加自定义视图时使View控制器成为委托。在自定义类中,在[self removeFromSuperview];
答案 1 :(得分:3)
由于将代码编写为注释并不方便,我将把它写成答案。这个答案说明了@Rage在他的回答中提出的建议。
首先,为delegate
创建delegate
并为其添加@protocol CustomViewDelegate<NSObject>
//You can also declare it as @optional. In this case your delegate can
//ignore this method. And when you call it, you have to check, whether
//your delegate implements it or not.
-(void)viewWasRemoved:(UIView *)view
@end
@interface CustomView: UIView
@property (nonatomic, weak) id<CustomViewDelegate> delegate;
@end
。您声明@implementation CustomView
-(void)exit {
[self removeFromSuperview];
//if your method is NOT @optional:
[self.delegate viewWasRemoved:self];
//if it IS @optional:
if ([self.delegate respondsToSelector:@selector(viewWasRemoved:)]) {
[self.delegate viewWasRemoved:self];
}
}
@end
应符合此协议。然后在ViewController中实现协议并将ViewController设置为CustomView的委托。
像这样:
<强> CustomView.h:强>
#import "CustomView.h"
@interface ViewController()<CustomViewDelegate>
@end
@implementation ViewController
-(void)someMethod {
self.customView.delegate = self;
}
-(void)viewWasRemoved:(UIView *)view {
//Whatever
}
@end
<强> CustomView.m:强>
:
<强> ViewController.m:强>
{{1}}
答案 2 :(得分:2)
使用名为viewWasRemoved:
的方法或类似方法为其设置委托。将您的视图委托设置为要通知的ViewController,然后在您的exit方法中,调用[self.delegate viewWasRemoved:self];
,然后启动ViewController中的viewWasRemoved:
方法,您可以在其中删除视图后,您需要执行任何相关工作。
答案 3 :(得分:0)
我会发布一个详细的解决方案,以防它帮助任何人,或者任何人都可以提供任何指示。谢谢Rage,Bill L和FreeNickname:
答案是使用委托
首先我将superview导入我的子视图的.h:
#import "ViewController.h"
然后我将一个委托ID添加到同一个文件中:
@property (weak) id delegate;
然后在superview中初始化自定义UIView时,我设置了委托:
CustomView *view = [[CustomView alloc]initWithFrame:frame];
view.delegate = self;
我在superview中添加此方法以进行回调:
- (void) viewWasRemoved: (UIView *) view{
NSLog(@"removed");
}
然后最后在我的subView中调用该方法:
-(void)exit{
[self.delegate viewWasRemoved:self];
[self removeFromSuperview];
}