Как подтолкнуть другой вид на вкладке из другой вкладки? - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть вкладка - две вкладки с контроллером навигации в каждой.На второй карте я меняю базу данных, поэтому мне нужно обновить данные (я знаю viewWillAppear) на первой карте.Но есть навигационный контроллер, и я могу быть на следующем виде.

(к сожалению, у меня есть панель вкладок с панелью навигации, подключен статический - .XIB)

Как я могу вернуться к первомупосмотреть в навигационном контроллере на первой вкладке (из второй вкладки)?Или как я могу подтолкнуть другой взгляд на это, но не нарушать навигационный контроллер?

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

Вам необходимо вставить контроллер навигации в первой панели вкладок в корневой каталог, [firstTabBarViewController.navigationController popToRootViewControllerAnimated: NO];

Единственная проблема с этим - вам нужна ссылка на ваши первые контроллеры представления вкладок.

Другой способ сделать это (и я уже использовал этот метод) - использовать локальные уведомления.

В вашем первом методе view view контроллеров viewDidLoad добавьте следующую строку, чтобы зарегистрировать уведомление, вы можете назвать уведомление как угодно, например, DatabaseChangedNotification.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(databaeHasChanged:) name:@"DatabaseChangedNotification" object:nil]; 

Затем добавьте новый (void) метод с именем databaseHasChanged, этот метод будет вызываться каждый раз при получении уведомления. Ваш метод databaseHasChanged должен выглядеть примерно так:

-(void)databaseHasChanged
{
    [self.navigationController popToRootViewControllerAnimated:NO];
}

Затем в вашем методе dealloc убедитесь, что вы отменили уведомление, используя следующий код:

   [[NSNotificationCenter defaultCenter] removeObserver:self];

Приведенный выше код настроит ваш первый контроллер представления для прослушивания и обработки DatabaseChangedNotification.

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

[[NSNotificationCenter defaultCenter] postNotificationName:@"DatabaseChangedNotification"
                                                    object:nil];
1 голос
/ 20 декабря 2011

В вашем viewWillAppear первой вкладки вы захотите получить доступ к корневому контроллеру представления:

[self.navigationController popToRootViewControllerAnimated:YES];

Вы не можете сделать это со своей второй вкладки.Однако вы можете установить флаг где-нибудь, например, в nsuserdefaults или в вашей базе данных, и в вашем viewWillAppear (на первой вкладке) проверить этот флаг, чтобы узнать, нужно ли вам переходить к корневому контроллеру представления.

...