2013-08-04 2 views
2

Я использую monotouch для разработки приложений ios. Предположим, что у меня есть 3 экрана: s1, s2 и s3. Пользователь может открыть их следующим образом: s1 -> s2 -> s3.Нет истории для экрана на ios

Я хочу, чтобы пользователь открывал s2, он может вернуться с помощью кнопки навигации назад на экран s1, но если он перейдет на экран s3, нажав кнопку возврата на панели навигации, приложение вернется к s1 no s2.

Возможно ли это в ios? На андроиде, если вы используете атрибут NoHistory, вы можете реализовать эту функцию, есть ли эквивалент в ios тоже?

ответ

3

Вы можете вручную отредактировать контроллеры представления в вашем навигационном контроллере, чтобы удалить s2.

Вы можете использовать self.navigationController.viewControllers, чтобы получить текущий стек, и [self.navigationController setViewControllers:animated:], чтобы установить стек.

В вашем случае, вы можете сделать:

NSMutableArray *views = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers]; 
[views removeObjectAtIndex:1]; 
[self.navigationController setViewControllers:views animated:NO]; 

Если вы вызываете это в s3 ViewController, он получит viewControllers в стеке, удалите второй (объект с индексом 1), и установите их как новый стек. анимированный: NO просто делает это так, что он делает это мгновенно без анимации.

Помните, что вам может понадобиться изменить эту строку кода так, чтобы, если вы когда-либо добираетесь до s3 без s2, находящегося до него, он не пополняет s3. Также, если есть другое представление между s2 и корнем, то вы хотите удалить, возможно, не objectAtIndex:1.

0

U можете попробовать этот

On Кнопка Назад:

for (UIViewController * viewController in self.navigationController.viewControllers) 
{ 
    if ([viewController isKindOfClass: NSClassFromString(@"<ClassName for S3>")]) 
    { 
     [self.navigationController popToViewController: [self.navigationController.viewControllers objectAtIndex: 0] animated: NO]; 
      break; 
    } 
} 

или и можно также использовать

[self.navigationController popToRootViewControllerAnimated: NO]; 
Смежные вопросы