вызов метода в подклассе UIView - PullRequest
0 голосов
/ 24 марта 2010

У меня есть UIViewController и собственный класс, подкласс UIView.

В моем ViewController я делаю экземпляр uiview. Если я коснусь uiview, в нем будет вызвана функция и появится наложение. Чтобы избавиться от этого наложения позже, пользователь должен нажать где-нибудь на экране (кроме экземпляра моего класса)

Как мне сказать моему классу отклонить оверлей? Я уже думал о делегате.

Итак, я думал создать MyUIViewControllerdelegate. Если мой viewcontroller получает сигнал, должен быть вызван делегат. Единственная проблема заключается в том, как мне сообщить моему подклассу, что он должен получить этого делегата? У меня нет экземпляра моего viewcontroller в моем подклассе, поэтому я не могу установить делегата.

Есть идеи? Надеюсь, моя проблема ясна:)

Большое спасибо

1 Ответ

1 голос
/ 24 марта 2010

Единственная проблема в том, как мне сказать, подкласс, что он должен получить, что делегировать? У меня нет экземпляра моего 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 ...
}
...