我有一个UIViewController和一个自己的类,是UIView的子类。
在我的ViewController中,我创建了一个uiview的实例。 如果我点击uiview,则会在其中调用一个函数并显示一个叠加层。 为了摆脱那个叠加层,用户必须点击屏幕上的某个地方(除了我班级的实例)
如何告诉班级解雇叠加?我已经想到了代表。
所以我的想法是制作一个MyUIViewControllerdelegate。如果我的viewcontroller收到tap,则应调用该委托。唯一的问题是如何告诉我的子类它应该接收该委托?我的子类中没有viewcontroller的实例,因此我无法设置委托。
任何想法?希望我的问题很明确:))
非常感谢
答案 0 :(得分:1)
唯一的问题是如何告诉我的 它应该接收的子类 代表?我没有我的例子 我的子类中的viewcontroller所以我可以 没有设置代表。
MyUIView.h:
@protocol MyUIViewDelegate;
@interface MyUIView : UIView
{
...
id<MyUIViewDelegate> delegate;
...
}
...
@property (nonatomic, assign) id<MyUIViewDelegate> delegate;
...
@end
@protocol MyUIViewDelegate <NSObject>
- (void)myUIViewDidFinish:(MyUIView*)myUIView;
@end
MyUIView.m:
...
@synthesize delegate;
...
- (void)dismiss
{
[delegate myUIViewDidFinish:self];
}
MyUIViewController.h:
#import "MyUIView.h"
@interface MyUIViewController : UIViewController <MyUIViewDelegate>
{
...
MyUIView* myOverlay;
...
}
...
@property (nonatomic, retain) IBOutlet MyUIView* myOverlay;
...
@end
MyUIViewController.m:
...
@synthesize myOverlay;
...
- (void)dealloc
{
...
[myOverlay release];
...
[super dealloc];
}
...
- (void)viewDidLoad
{
[super viewDidLoad];
...
myOverlay.delegate = self;
...
}
...
- (void)showMyUIView
{
// ... show myOverlay ...
}
...
#pragma mark MyUIViewDelegate Methods
- (void)myUIViewDidFinish:(MyUIView*)myUIView
{
// ... hide myOverlay ...
}