#objective-c #ios #uisplitviewcontroller
#objective-c #iOS #uisplitviewcontroller
Вопрос:
У меня есть проект шаблона SplitView. Я хочу изменить DetailView при выборе пользователем элемента в RootViewController.
На самом деле я не могу просто изменить то, что находится внутри этого представления (DetailView), как это делается в шаблоне (когда вы устанавливаете флажок «использовать хранилище основных данных» при создании проекта). Я хочу переключаться между целыми представлениями.
Я пробовал это:
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.detailViewController setView:curretnDetailViewController.view];
appDelegate.detailViewController = currentDetailViewController;
Кстати, я не понимаю, зачем мне нужна строка # 2 (..setView: ..)? Почему назначения DetailViewController (строка # 3) недостаточно? — Код выглядит ужасно = (
Но в любом случае это работает не совсем так, как я хочу. Все, кроме DetailView, исчезает. Как будто я изменил основной вид, а не только DetailViewController
Я думаю, я должен что-то изменить в splitViewController, но не выяснил, что = (
Спасибо за ваше внимание.
Ответ №1:
У меня тоже были ваши вопросы около недели назад, и я тоже получил небольшую помощь на этом форуме. Я надеюсь, что смогу изменить это для вас.
Во-первых, знаете ли вы, что у Apple есть пример просмотра с несколькими деталями? Вот примеры Apple
Вы должны понимать, что такое splitviewcontroller, чтобы получить представление о том, что делает Apple. Думайте о контроллере splitview как о контейнере в окне вашего устройства. Этот контейнер имеет 2 отделения, тонкую левую сторону и большую правую сторону. Теперь, чтобы изменить любую сторону, вы должны заменить этот раздел другим разделом аналогичного размера и характера. Вы не можете поместить туда отсек, который не подходит или который делает что-то необычное, потому что он просто не поместится.
В техническом обсуждении найдите приведенный ниже код в примере. Контроллер splitview имеет массив из 2 представлений, и вы можете изменять представления в этом массиве. Таким образом, в этом массиве есть 2 вида, левый называется navigationcontroller, а правый — detailviewcontroller. Если вы выделите и инициируете представление и добавите его к любому из этих двух, то это представление заменит текущее представление в splitviewcontroller.
NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil];
splitViewController.viewControllers = viewControllers;
Теперь перейдем ко второй части вашего вопроса — я думаю, что с левой стороны вы хотите всегда иметь возможность выбирать что-то и иметь возможность изменять правую руку side….am Я прав?
Я прочитал три разных способа сделать это и не видел никого, кто сказал бы, что один лучше другого.
- настройте уведомление, при котором при нажатии на что-либо слева уведомление отправляется в правую часть.
- когда вы начинаете с нижнего или корневого представления левой стороны, у вас будет ссылка на правую сторону, если вы добавляете подвиды и т.д. В левую сторону, вы всегда передаете ссылку на правую сторону.
- Способ, которым я это сделал, заключался в настройке протокола в appdelegate или в делегате rootview, затем в представлении, с которым я хочу поговорить, с правой стороны, он использует этот протокол, и моя правая сторона реализует этот протокол. Это последнее, что я изучил, поскольку это предпочтительный метод получения модальных представлений для взаимодействия с другими представлениями.
Я не эксперт, поэтому я не добавил код для каждого из трех вариантов выше, я предлагаю вам немного поискать темы в Google, и вы увидите примеры. Если вы действительно застряли на одном, дайте мне знать, и я попытаюсь снова найти в Google примеры, которые я находил в прошлом. Наименее сложным, я думаю, является № 1.
Я надеюсь, что это поможет вам двигаться в правильном направлении.
Комментарии:
1. Есть ли шанс, что у вас все еще есть пример третьего метода, который вы перечислили выше?