Вызовите метод из ModalView, который находится в представлении сошника - PullRequest
0 голосов
/ 17 января 2011

В основном у меня есть viewController, который загружается при запуске приложения.В этом VC, в зависимости от того, есть ли пользовательские данные, я обслуживаю ModalView с любым логином.После того, как пользователь войдет в систему, я смогу закрыть modalView, но я хотел бы вызвать метод для открывания, который затем заполнит таблицу данными.

Я подумал, что из modalView я могу сделать что-то вроде

[self.parentViewController loadInitialData];
[self.dismissModalViewControllerAnimated:YES];

но это не работает ..

есть предложения?

1 Ответ

5 голосов
/ 17 января 2011

Проблема в том, что self.parentViewController имеет тип "UIViewController", а ваш метод -loadInitialData не существует в UIViewController. Существует несколько распространенных способов решения этой проблемы ... от самого простого и наименее «правильного» до наиболее сложного и наиболее «правильного»:

1) Сначала вам нужно привести ваш self.parentViewController к типу родительского контроллера представления. Что-то вроде:

MyParentViewController *parentVC = (MyParentViewController*)self.parentViewController;
[parentVC loadInitialData];

2) Вы можете добавить свойство к вашему контроллеру модального представления, которое явно хранит ссылку на ваш родительский контроллер представления, и затем вызвать loadInitialData, делая это.

@interface MyModalViewController : UIViewController {
    MyParentViewController *myParentViewController;
}

@property (nonatomic, retain) MyParentViewController *myParentViewController;

Тогда вы можете позвонить:

[self.myParentViewController loadInitialData];

3) Самый сложный, но самый правильный способ сделать это - создать протокол Delegate, заставить ваш ParentViewController реализовать протокол, и чтобы ваш модальный контроллер представления сохранял ссылку на делегат и вызывал этот путь. Что-то вроде:

@protocol ManageDataDelegate

- (void) loadInitialData;

@end


@interface MyParentViewController : UIViewController <ManageDataDelegate> { ...


@interface MyModalViewController : UIViewController {
    id<ManageDataDelegate> delegate;
}

@property (nonatomic, assign) id<ManageDataDelegate> delegate;

Когда вы представляете свой контроллер модального вида, просто установите делегата. В вашем MyParentViewController:

MyModalViewController *vc = [[MyModalViewController alloc] init];
vc.delegate = self;
[self presentModalViewController:vc];

Тогда в вашем контроллере модального вида вы можете перезвонить так:

[self.delegate loadInitialData];
...