2010-03-24 102 views
0

我有一个UIViewController和一个自己的类,UIView的子类。调用方法在UIView的子类

在我的ViewController中,我制作了一个uiview的实例。 如果我点击uiview,一个函数被调用,并出现覆盖。 为了摆脱这种覆盖以后用户不得不点击屏幕上的某个地方(除了我的班级的实例)

如何告诉我的班级关闭覆盖?我已经想到了代表。

所以我的想法是做一个MyUIViewControllerdelegate。如果我的viewcontroller收到一个tap,那么应该调用delegate。唯一的问题是如何告诉我的子类它应该接收该委托?我在我的子类没有我的viewcontroller的实例,所以我不能设置委托。

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

非常感谢

回答

1

唯一的问题是我怎么告诉我的 子类,它应该会收到 委托?我没有在我的子类中的我的 视图控制器的实例,所以我可以 未设置委托。

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 ... 
} 
+0

首先:感谢您的工作:)!到目前为止,我正在理解你的工作。但是,如果我使MyUIView的多个实例如何呢? 我想让数量与数量一样多。 所以我不能在@interface中设置它们全部? – rdesign 2010-03-24 19:38:48