Просмотр контроллера/архитектуры NIB для приложения, не связанного с навигацией с переходами?

StackOverflow https://stackoverflow.com/questions/2511558

Вопрос

Я возится с приложением для iPad, которое (как и многие приложения для iPad) не использует систему управления видом на корень Uinavigation, поэтому у меня нет естественной собственности для каждого приложения «View». По сути, у меня есть два основных представления: представление списка документов и представление о редактировании документа.

Я играю с Uiview Animation для получения из выбранного документа в представление «Редактировать».

У меня также есть панель инструментов сверху, которая существует (с разными кнопками) в обоих «видах».

Поскольку у меня нет uinavigation для меня шоу, у меня есть тенденция просто бросать все больше и больше вещей в один NIB и один контроллер View, которому принадлежит весь контейнер. Но теперь я пытаюсь выяснить, как перейти из представления списка документов с просмотром «Редактировать, если представление редактирования» живет внутри другого печи, сохраняя панель инструментов.

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

Вы не «предполагаете» иметь контроллеров представления родителей/ребенка, владеющих подкомпонентами того же «экрана» в соответствии с документами, но это подразумевает один огромный контроллер представления, который в основном содержит все приложение, и это не может быть правильным.

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

Спасибо!

ОБНОВИТЬ: Я не говорю о разделенном виде, который явно хорошо обрабатывается контроллером разделителя. Вместо этого взгляните на приложения Apple IWork (например, страницы), которые имеют представление списка документов и независимое представление об редактировании, но они связаны с анимацией.

Может быть, настоящий вопрос здесь: как бы вы (или даже могли бы построить контроллер представления «контейнер», например, разделенное представление или контроллер навигации, сами? Вы должны построить всю чертову веща с нуля? Я чувствую, что вы есть, потому что, кажется, скрытая проводка во взаимодействии между контроллерами представления. Если так, мысли об этом?

Это было полезно?

Решение

Я думаю, что единственная скрытая проводка в контроллерах с видом на установление ParentViewController, которая необходима для поддержки категорий, объявленных для разделения и навигации.

Контроллеры представления предназначены для того, чтобы быть вложенными, причем каждый контроллер владеет частью иерархии представления. Единственная цель дизайна состоит в том, что контроллер представления не достигает иерархии представления другого контроллера. У контроллера представления родителей обычно есть некоторый вызов для добавления дочерних контроллеров, чтобы он мог установить кадр представления в иерархии представления. Контроллер представления ребенка не должен ничего делать с надзором над представлением, который он контролирует, поскольку он принадлежит другому контроллеру. Не должно установить центр или кадр вида, который он управляет.

Например, контроллер навигации имеет метод push, в котором он удаляет предыдущий представление контроллера, добавляет новый представление контроллера и устанавливает кадр недавно добавленного представления. В целом, контроллер представления родителей может свободно устанавливать кадр вида дочернего контроллера, но не границы.

Если вы хотите изменить анимацию контроллера навигации, я думаю, что вы начнете с реализации каждого метода с помощью анимированного: аргумента. Установите свою анимацию, затем позвоните Super с помощью анимационного флага, прежде чем совершить анимацию.

Другие советы

Я не пробовал вещью с несколькими контроллерами за пределами предоставленных UIKIT (навигация/вкладка/модал/и т. Д.), Но я не понимаю, почему это не должно работать. Под капотом все является представлением, хотя я отмечу, что у Uikit есть особые представления для контроллеров просмотра, которые, несомненно, имеют какую -то специальную обработку системы (у UiviewController есть обертка, у UinavigationController есть UinavigationTransitionView или что -то в этом роде, .. .).

Я бы посоветовал не беспокоиться о «лучшей практике» - просто кодируйте что -то, что делает то, что вы хотите. Пара вариантов:

  • Придерживайтесь логики в классах (Ewwww!). Одно из наших приложений делает это так, чтобы он мог обрабатывать вращение по индивидуальному порядке (просмотры скользят/выходить вместо вращения). Вместо этого мы должны были реализовать нашу собственную логику контроллера представления.
  • Разбейте модель на компоненты, которые соответствуют представлениям. Сделайте каждый представление знать, как загрузить его компонент и рекурсивно загружать подкомпоненты. Тогда контроллер представления должен беспокоиться только о «большой картине».

Также обратите внимание, что вы можете загрузить несколько Nibs в один и тот же контроллер представления, например, подключив его к выходу, называемому EditView. Большая разница в том, что он не выполняется автоматически с помощью -[uiviewController LoadView], поэтому вам нужно что -то делать

-(EditView*)editView {
  if (!editView) {
    // Loads EditView into the outlet editView
    [NSBundle loadNibNamed:@"EditView" owner:self];
  }
  return editView;
}

Вам также нужно беспокоиться о том, чтобы добавить его в свою иерархию просмотра, разгрузить его на -(void) ViewDidunlughload (iPhone OS 3.0+), настраивая его в -(void) ViewDiddload, если было предупреждение о памяти во время режима редактирования, так далее...

Это не просто, но пользовательский интерфейс никогда не бывает.

Вам нужно представление в мастер-дето-хвосте, реализованное с помощью сплит-вида/поп-вида и управляемого с помощью UISplitViewController.

Основным представлением является список документов, а представление подробностей - это представление «Редактировать». У каждого есть собственный контроллер. Сами два контроллера управляются UisplitViewController.

Если вы не используете контроллер SplitView, вы просто в конечном итоге кодируете что -то, что очень похоже на это. Это действительно единственный способ легко сделать то, что вы хотите в API, и это макет, который ожидают пользователи iPad.

Видеть Создание интерфейса раздельного представления В Руководстве по программированию iPad для деталей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top