Как я могу вызвать метод в родительском представлении? (iPhone / Objective-C) - PullRequest
0 голосов
/ 18 октября 2011

У меня есть представление, которое используется для обновления некоторых NSUserDefaults. Эти значения по умолчанию влияют на таблицу в другом представлении. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу перезагрузить данные в таблице, прежде чем представление снова отобразится.

В настоящее время у меня есть viewA, который содержит таблицу, затем я отображаю viewB, используя следующий код:

[self presentModalViewController:viewB animated:YES];

Как только пользователь обновил NSUserDefaults, viewB отклоняется, поэтому снова отображается viewA. До отображения viewA я хочу иметь возможность обновить данные. Есть ли способ сделать это?

Ответы [ 4 ]

1 голос
/ 19 октября 2011

В представлении viewAWillAppear вы вызываете код обновления.

-(void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
     // your refresh code
}
0 голосов
/ 19 октября 2011

Я предполагаю, что вы отклоняете modalViewController или viewB в методе в viewA, если viewAcontroller является вашим делегатом для viewBcontroller.В этом же методе вам нужно только реализовать необходимые данные для перезагрузки таблицы, и это будет сделано перед повторным отображением viewA.

У меня есть такой код:

в viewBcontroller.hперед интерфейсом:

    @protocol ViewBControllerDelegate <NSObject>
   -(IBAction)closeViewBController;

    @end

в viewBcontroller.m:

    -(IBAction)closeView{


    [[self parentViewController] performSelector:@selector(closeViewBController)];

    }

В viewAcontroller.h:

    @interface viewAcontroller : UIViewController <ViewBControllerDelegate>
    {//....implementation here

и в ViewAController.m:

    -(IBAction)closeViewBController{
    [self dismissModalViewControllerAnimated:YES];
   //code needed if NSUserDefault is modified
    }

это довольно легко написать.Надеюсь, что это ответит на ваш вопрос

0 голосов
/ 18 октября 2011

Вы можете использовать presentingViewController / parentViewController (см. Документы на них).Но лучшее всестороннее решение состоит в том, чтобы сделать «родительский» делегатом вашего модального контроллера, и заставить родителя реализовать протокол, которому делегат соответствует.

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

0 голосов
/ 18 октября 2011

Через делегирование :

ViewAController должен реализовывать протокол , который ViewBController предлагает

@protocol ViewBControllerProtocol
/*
use full signatures here
*/
@end


@interface ViewBController{
}
@property (nonatomic, assign) id<ViewBControllerProtocol> delegate;
@end;


@interface ViewAController <ViewBControllerProtocol>{
}
@end;

@implemantation ViewAController

// implement the method defined in the protocol
@end

тогда вы делаете

viewB.delegate = viewA

Вы найдете пример кода на github , где CheckTableController будет ViewBController и ShowFavoritesTableController ViewAController.

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