5

В моем проекте я использовал код для обращения к кнопке «Назад» следующим образом.navigationController.viewControllers Работает по-разному в iOS 8.2

NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers]; 
if ([[VCs objectAtIndex:[VCs count] - 2] isKindOfClass:[LoginViewController class]]) 
{ 
    [VCs removeObjectAtIndex:[VCs count] - 2]; 
    [VCs removeObjectAtIndex:[VCs count] - 2]; 
} 
[self.navigationController setViewControllers: VCs]; 

В iOS 7 Я получаю желаемый результат. Но для iOS версии 8.2 значение в VC измененных массивов - это только текущий или topViewController в стеке. Но кнопка «Назад» переместит вас ко всем предыдущим диспетчерам просмотра. Но ни один из них не присутствует в стеке навигации. Есть ли какие-либо изменения в обработке навигации в ios8?

Я хочу удалить диспетчер просмотра экрана входа из стека, чтобы при нажатии кнопки «Назад» он не вернется на экран входа в систему. Я столкнулся с этой проблемой только в iOS 8.2 (может быть в iOS 8 и выше). Что может быть проблемой?

Edit:

В prepareForSegue:, я использую следующий код:

if([[segue identifier] isEqualToString:@"mediaDetailSegue1"]) 
{ 
    MovieDetailViewController *movieDetail; 
    if(isIOS8SystemVersion) 
    { 
     movieDetail = ([[segue destinationViewController]viewControllers][0]); 
    } 
    else 
    { 
     movieDetail = [segue destinationViewController]; 
    } 

     movieDetail.videoData = [_mediaContentArray objectAtIndex:selectedIndex]; 
    } 

так для IOS версии больше, чем 8, код

movieDetail = ([[segue destinationViewController]viewControllers][0]); 

называется , Я думаю, что это вызывает проблему. Я делаю это неправильно?

+0

Вы вошли в массив на обеих версиях ОС и тот же сценарий тест? – Wain

+0

yes.In мой iphone 4s с ios 7.2, все viewControllers отображаются. Но когда я подключаю iphone 5s с ios 8.2, консоль массива является one.only topViewcontroller есть в массиве. Но кнопка back будет перемещаться по вам для всех предыдущих контроллеров view.But, но ни один из них не присутствует там в стеке навигации. Есть ли какие-либо изменения в обработке навигации в ios8? – abhi1992

+0

Довольно большая ошибка, если она есть. У вас есть другой код, который изменяет стек? – Wain

ответ

1

я получил причину, почему мой навигации стек, имеющий только один ViewController. В iOS8 и выше, если мы сделаем segue из viewController ко второму viewController через navigationController второго VC, тогда навигацияStack второго VC будет содержать только topViewController.

Я попытался создать образец проекта. Если segue находится от VC до второго VC напрямую, тогда стек навигации VC2 будет содержать VC1 и VC2.Если segue находится через контроллер навигации VC2, тогда навигация стек VC2 будет содержать только VC2. Строгое поведение iOS8.

В обоих этих случаях, приложение ведет себя аналогично в ИО 7.Dont знаю, почему он ведет себя странно в ios8

+0

Не могли бы вы дать объяснение немного больше? – Hussein

0

Я пытаюсь сделать то же самое с iOS 8.2. self.navigationController.viewControllers возвращает все контроллеры представлений в стеке. Нет таких проблем. Я не уверен, почему вы столкнулись с такой проблемой.

Попробуйте использовать этот код. Он отлично работает для меня.

NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers]; 

for(int i = 0; i < VCs.count; i++) 
{ 
    UIViewController *vc = VCs[i]; 
    if ([vc isKindOfClass:[LoginViewController class]]) 
    { 
     [VCs removeObjectAtIndex:i]; 
    } 

[self.navigationController setViewControllers: VCs]; 
+0

Благодарю вас за ваше время. Но self.navigationController.viewControllers содержит только один Vc за раз (iOS8). Моя логика отлично работает для iOS 7. – abhi1992

+0

Вы использовали segues через контроллер навигации или непосредственно в viewController? – abhi1992

+0

У меня есть причина. Посмотрите на ответ, если вам нужно. :) – abhi1992

Смежные вопросы