在UIView的子类中调用方法

时间:2010-03-24 10:39:05

标签: iphone class uiview delegates subclass

我有一个UIViewController和一个自己的类,是UIView的子类。

在我的ViewController中,我创建了一个uiview的实例。 如果我点击uiview,则会在其中调用一个函数并显示一个叠加层。 为了摆脱那个叠加层,用户必须点击屏幕上的某个地方(除了我班级的实例)

如何告诉班级解雇叠加?我已经想到了代表。

所以我的想法是制作一个MyUIViewControllerdelegate。如果我的viewcontroller收到tap,则应调用该委托。唯一的问题是如何告诉我的子类它应该接收该委托?我的子类中没有viewcontroller的实例,因此我无法设置委托。

任何想法?希望我的问题很明确:))

非常感谢

1 个答案:

答案 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 ...
}