ModalViewCOntroller в NavigationController - PullRequest
0 голосов
/ 07 июня 2011

У меня есть NavigationController, который представляет представление (ShoppingController) с кнопкой, которую я называю ModalViewController:

    AddProductController *maView = [[AddProductController alloc] init];
maView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:maView animated:YES];

Когда я хочу обменяться данными из моего модального представления с его родителем, у меня возникает ошибка, потому что [self parentViewController] ссылается на мой NavigationController, а не на ShoppingController.

Как я могу отправить данные из моего ModalView AddProductController в мой вызывающий ShoppingController?

1 Ответ

1 голос
/ 07 июня 2011

Вы можете использовать шаблон делегата.

В вашем классе AddProductController при обработке нажатия кнопки вы можете затем отправить сообщение его делегату, который вы указали в качестве ShoppingController.

Итак, в AddProductController:

-(void)buttonHandler:(id)sender {
    // after doing some stuff and handling the button tap, i check to see if i have a delegate.
    // if i have a delegate, then check if it responds to a particular selector, and if so, call the selector and send some data
    // the "someData" object is the data you want to pass to the caller/delegate
    if (self.delegate && [self.delegate respondsToSelector:@selector(receiveData:)])
        [self.delegate performSelector:@selector(receiveData:) withObject:someData];
}

Затем в ShoppingController (и не забудьте выпустить maView):

-(void)someMethod {
    AddProductController *maView = [[AddProductController alloc] init];
    maView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    maView.delegate = self;
    [self presentModalViewController:maView animated:YES];
    [maView release];
}

-(void)receiveData:(id)someData {
     // do something with someData passed from AddProductController
}

Если вы хотите стать модным, вы можете сделать receiveData: частью протокола. Затем ваш ShoppingController может реализовать протокол, и вместо проверки с помощью [self.delegate respondsToSelector:@selector(x)] вы проверяете, что [self.delegate conformsToProtocol:@protocol(y)].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...