2010-03-24 105 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