Как добавить View в NavigationController, который содержится в другой вкладке TabBarController - PullRequest
1 голос
/ 18 марта 2011

У меня есть TabBarController с 2 вкладками, в одной из них MapView, а в другой простой TableView в NavigationController.Оба отображают данные из одного источника.Если какие-либо данные в таблице касаются, я добавляю DetailViewController в NavigationController и показываю более подробную информацию.Теперь в MapView я также хочу открыть этот DetailViewController, когда данные коснутся карты.Какой лучший способ сделать это?Я пробовал некоторые с уведомлением, но это не работает, потому что TableViewController закончил загрузку (и зарегистрирован как наблюдатель) после отправки уведомления.

Вот мой код:

MapViewController:

- (IBAction)goToNearestEvent:(id)sender {
    if (currentNearestEvent) {
        [[self tabBarController] setSelectedIndex:1];

        NSDictionary *noteInfo = [[NSDictionary alloc] initWithObjectsAndKeys:currentNearestEvent, @"event", nil];
        NSNotification *note = [NSNotification notificationWithName:@"loadDetailViewForEvent" object:self userInfo:noteInfo];
        [[NSNotificationCenter defaultCenter] postNotification:note];
        [noteInfo release];
    }
}

TableViewController:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

    [nc addObserver:self 
           selector:@selector(loadDetailViewForEvent:)
               name:@"loadDetailViewForEvent"
             object:nil];
}

- (void)loadDetailViewForEvent:(NSNotification *)note {
    Event *e = [[note userInfo] objectForKey:@"event"];
    [self loadEventDetailViewWithEvent:e];
}

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

Я забыл четко объявить свою структуру:

- UITabBarController
  - MapView (1)
  - NavigationControllerContainer
    - NavigationControllerView (2)
       - TableView

Я хочу выдвинуть новый вид из MapView (1) в NavigationControllerView (2).

Ответы [ 3 ]

1 голос
/ 18 марта 2011

Если вы собираетесь использовать уведомления, исправление состоит в том, чтобы заставить «вторую» вкладку быть «созданной» до ее отображения.

0 голосов
/ 18 марта 2011

Я думаю, что шаблон наблюдателя / уведомления правильный. Однако обычно вы хотите, чтобы «контроллеры» наблюдали «модельные» объекты.

Я бы создал объект Model, содержащий выбранное событие.

Когда каждый viewController загружен, он смотрит на объект «Модель» и направляет себя к выбранному событию.

Когда какой-либо из viewControllers изменяет выбранное событие, он делает это в Модели, а затем уведомление распространяется на другие контроллеры.

0 голосов
/ 18 марта 2011

У меня нет доступа к моему коду, но я сделал нечто похожее на:

[[self.tabBarController.viewControllers objectAtIndex: 1] pushViewController: detailView animated: YES];

Попробуйте и дайте мне знать.

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