2013-04-16 7 views
0

У меня есть контроллер вида, который отображает управление карусели (iCarousel). Вид отображается правильно и отображается карусель. Сразу после этого отображается модальная мода, которая позволяет пользователю согласиться с определенными условиями. Я хочу, чтобы после согласования я обновил viewcontroller, который содержит контроль карусели. В принципе, я хочу повернуть карусель к некоторому случайному индексу.Обновление UIViewController от Modal Controller

- (IBAction)accept:(id)sender 
{ 
    NewsViewController *newsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"NewsStoryboard"]; 

    [newsViewController loadNews]; 
    [newsViewController.view setNeedsDisplay]; 



    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

Приведенный выше код вызывает loadNews и извлекает его, но представление никогда не обновляется.

+1

Вы должны создать делегат для модально представленного ViewController. Вы можете сослаться на это сообщение http://stackoverflow.com/a/9736559/767730 – Anupdas

+1

Это не работает, потому что вы создаете новый NewsViewController, а не вызываете loadNews на свой существующий. Возможно, вы захотите сделать делегата или использовать уведомление. См. Http://stackoverflow.com/questions/569940/whats-the-best-way-to-communicate-between-view-controllers –

+0

Это не новостной контроллер, демонстрирующий модальность, поэтому трудно создать решение на основе делегатов. Может быть, я увижу NSNotification –

ответ

2

Что происходит с карусели, должно быть действительно до контроллера вида, который управляет им, а не модального контроллера. Сделать modal контроллер делать свою вещь и возвращать любые данные, которые он собирает для своего родителя. Родитель (в данном случае, контроллер карусели) может затем просмотреть эти данные и решить, что ему нужно делать дальше (например, обновить).

0

Проблема эта линия:

NewsViewController *newsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"NewsStoryboard"]; 

Это не старый контроллер представления; это новый, неиспользованный экземпляр этого контроллера. Вам необходимо создать линию связи от контроллера модального просмотра до существующего контроллера отображения.

Типичный способ сделать это через делегат, который вы устанавливаете при создании модального контроллера. Если вы посмотрите на шаблон утилиты Xcode, вы увидите, что он иллюстрирует эту архитектуру. Первоначальный контроллер представлений задает себя как делегат диспетчера модального представления, и контроллер модального представления, таким образом, может вернуться к исходному контроллеру представления, поскольку он отклонен.

Это такая важная вещь, чтобы быть в состоянии сделать, что я об этом говорить подробно в моей книге:

http://www.apeth.com/iOSBook/ch19.html#_presented_view_controller

Смежные вопросы