2015-04-18 2 views
0

У меня проблема в iOS8, когда у меня есть несколько подробных представлений в UISplitViewController, проблема возникает только в горизонтально компактном режиме.iOS8 поведение кнопки режима отображения UISplitViewController

Моя раскадровка выглядит примерно так: enter image description here

Как вы можете видеть, стол моего хозяина есть два типа клеток, каждый из которых соединен с «собственным» иерархией выносных с помощью Показать Подробности Segue , Таким образом, щелчок первой ячейки будет загружать D1 (и его корень) во вторичную область разделения, щелкнув вторую ячейку, будет загружать D2 там.

Я добавляю кнопку супер умный режим дисплея Разделить к навигации пункту любой детали, когда подготовке к Segue:

controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem; 
controller.navigationItem.leftItemsSupplementBackButton = YES; 

Все работает отлично, за исключением одного случая:

  • Я нахожусь в горизонтальном положении компактного размер (например, портрет iPhone 6)
  • Отображается вторичная область, например, экран D1. Первичный скрыт.
  • В некоторых случаях (например, нажатие кнопки в D1) Я хочу загрузить D2 во вторичную область. Я звоню performSegueWithIdentifier:@"showDetailD2"..., чтобы загрузить его.

Теперь, когда я делаю это, моя волшебная кнопка режима отображения показывает «< D1» и щелчок по ней возвращается к D1! То есть полностью не поведение, которое я хочу. Такая «история» назад желательна, когда я нахожусь в внутри D1 или D2 (и я считаю, что эта кнопка достаточно умен, чтобы сделать это). Но когда я нахожусь на верхнем уровне, я хочу, чтобы он открыл основную область. В основном мне нужно больше что-то вроде левого выдвижного ящика (как в Android).

Обоснование: Мой D1 является не выражают какой-то ошибки/неполное состояние (нет соединения/ни один пользователь/и т.д.), и когда состояние «фиксированных», то «нормальный» интерфейс загружается через D2 или D3 или любой Другие. На данный момент действительно странно видеть кнопку возврата на страницу с ошибкой. Эта функция истории даже хороша, когда я перехожу от D2 к D3, поэтому, если есть способ как-то удалить D1 из истории, это также поможет мне.

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

ответ

0

Итак, после некоторого времени я нашел способ получить то, что мне нужно. Выходит, что в сложенном режиме разделенный вид «становится» просто простым навигационным контроллером под капотом. Таким образом, есть родительский контроллер навигации поверх D2 (который также является навигационным контроллером). Приведенный ниже код написано в viewDidLoad в корневого контроллера D2 делает трюк:

UINavigationController* parentNavi = self.navigationController.navigationController; 
if (parentNavi != nil) { 
    // will get here only in collapsed mode 
    NSMutableArray *controllers = [NSMutableArray arrayWithArray:parentNavi.viewControllers]; 
    NSMutableIndexSet *set = [NSMutableIndexSet indexSet]; 
    for (UIViewController *controller in controllers) { 
     if ([controller.title isEqualToString:@"D1"]) { 
      [set addIndex:[controllers indexOfObject:controller]]; 
     } 
    } 
    [controllers removeObjectsAtIndexes:set]; 
    parentNavi.viewControllers = controllers; 
} 

код будет ввести if заявления только тогда, когда вы в компактных размерах. После очистки контроллеров кнопка режима отображения указывает на основную область. Этот код также довольно гибкий - вы можете избавиться от любой страницы, которая вам не нужна в стеке.

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