iOS: Как динамически изменить DetailView в шаблоне SplitView? - PullRequest
6 голосов
/ 12 апреля 2011

У меня есть шаблон проекта SplitView. Я хочу изменить DetailView при выборе пользователем элемента в RootViewController.

На самом деле я не могу просто изменить то, что находится внутри этого представления (DetailView), как это сделано в шаблоне (когда вы проверяете «использовать хранилище данных ядра» при создании проекта). Я хочу переключаться между целыми представлениями.

Я пробовал это:

AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.detailViewController setView:curretnDetailViewController.view];
appDelegate.detailViewController = currentDetailViewController;

Кстати, я не понимаю, зачем мне строка № 2 (..setView: ..)? Почему назначение detailViewController (строка № 3) недостаточно? - Код выглядит ужасно = (

Но в любом случае это не работает так, как я хочу. Все, кроме detailView исчезает. Как будто я изменил основной вид, а не только DetailViewController's

Полагаю, мне нужно что-то изменить в splitViewController, но я не выяснил, что = (

Спасибо за внимание.

1 Ответ

18 голосов
/ 25 апреля 2011

У меня тоже были ваши вопросы около недели назад, и я тоже мало помогал на этом форуме.Я надеюсь, что смогу изменить это для вас.

Сначала вы знали, что у Apple есть пример Multi Detail View?Именно здесь Примеры Apple

Вы должны понять, что такое контроллер splitview, чтобы понять, что делает Apple.Думайте о контроллере splitview как о контейнере в окне вашего устройства.Этот контейнер имеет 2 отделения, тонкая левая сторона больше правой стороны.Теперь, чтобы перейти на другую сторону, вы должны заменить это отделение на другое отделение такого же размера и природы.Вы не можете поместить туда отсек, который не подходит или делает что-то необычное, потому что он просто не подходит.

В техническом разговоре найдите приведенный ниже код в примере.Контроллер splitview имеет массив из 2 представлений, и вы можете изменить представления в этом массиве.Таким образом, в этом массиве 2 вида, левый называется навигационным контроллером, а правый - детализированным контроллером.Если вы выделите и инициируете представление и добавите его к любому из этих двух, то это представление заменит текущее представление в splitviewcontroller.

NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil];
splitViewController.viewControllers = viewControllers;

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

Я читал три разных способа сделать это и невидел кого-то, кто говорит, что одно лучше другого.

  1. настроил уведомление - когда вы нажимаете на что-то слева, уведомление направляется на правую сторону.
  2. когда вы начинаете с нижнего или корневого вида левой стороны, у вас будет ссылка на правую сторону, если вы добавляете подпредставления и т. д. с левой стороны, вы всегда передаете ссылку на правую сторону.
  3. То, как я это сделал, было настроить протокол в приложении appdelegate или в делегате rootview, а затем в представлении, которое я хочу поговорить с правой рукой.сторона использует этот протокол, и моя правая сторона реализует этот протокол.Этот последний я узнал, так как это предпочтительный метод получения модальных представлений для общения с другими представлениями.

Я не эксперт, поэтому я не добавил код для каждого из 3 вариантов выше, чтоЯ предлагаю вам немного погуглить по темам, и вы увидите примеры.Если вы действительно застряли на одном, дайте мне знать, и я попытаюсь снова найти с помощью Google примеры, которые я нашел в прошлом.Наименее сложным, я думаю, является № 1.

Надеюсь, это поможет вам двигаться в правильном направлении.

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