Поддержание синхронизации MasterViewController и DetailViewController - PullRequest
1 голос
/ 16 февраля 2012

Я пишу простое приложение для iPad с использованием Xcode 4 и iOS5.

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

Я хочу иметь возможность удалить элемент с помощью кнопки в подробном представлении. Это очень просто сделать в подробном представлении. Однако я не могу понять, как изменить мастер-представление, чтобы отразить тот факт, что элемент был удален.

По сути, шаблон делегата, кажется, идет только в одну сторону; от мастера к деталям, а не от деталей к мастеру. Есть ли способ передать сообщения от детали мастеру?

1 Ответ

1 голос
/ 10 мая 2012

Вы можете сделать это с помощью NSNotifications.

#define ReloadMasterTableNotification @"ReloadMasterTableNotification"

В вашем viewDidLoad MasterViewController:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadMasterTable:) name:ReloadMasterTableNotification object:_detailViewController];

в dealloc MasterViewController, если вы используете ARC:

[[NSNotificationCenter defaultCenter] removeObserver:self name:ReloadMasterTableNotification object:nil];

Когда вы хотите сделатьобновите в detailViewController, чтобы уведомить MasterViewController:

- (IBAction)onButtonPress {
        NSIndexPath *path = [NSIndexPath indexPathForRow:indexToUpdate inSection:0];
        NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:path, @"IndexPath", nil];
        [[NSNotificationCenter defaultCenter] postNotificationName:ReloadMasterTableNotification object:self userInfo:dict];
}

- (void)reloadMasterTable:(NSNotification *)notification {
    NSDictionary *dict = [notification userInfo];
    NSIndexPath *path = [dict objectForKey:@"IndexPath"];
    // update MasterViewController here
}

Надеюсь, это поможет!

...