Учитывая приложение для iPhone с UITableViewController , помещенным на UINavigationController , я хотел бы добавить элемент кнопки правой панели, чтобы переключаться между представлением таблицы и «альтернативным» представлениемодни и те же данные.Давайте также скажем, что это другое представление использует те же данные, но не a UITableView .
Теперь я знаю, что вариации этого вопроса уже существуют в переполнении стека.Однако в этом случае это альтернативное представление не будет передано на UINavigationController .Это было бы визуально сродни переворачиванию текущего табличного представления UIViewController и открытию другого представления, а затем возможность перевернуться назад.Другими словами, он предназначен для того, чтобы занимать одно место в иерархии UINavigationController .
Более того, независимо от того, какой выбор вы в конечном итоге сделаете из любого представления, будет выдвигаться общий UIViewController в UINavigationController стек.
Еще больше информации: мы не хотим использовать отдельный UINavigationController только для обработки этой пары представлений, и мы неЯ тоже не хочу разделять их на UITabBarController .Визуально и контекстно, UX должен показать две стороны одной медали.Просто эти две стороны задействуют свои собственные контроллеры вида в обычной практике.
Теперь ... оказывается, я уже ушел и быстро настроил это, чтобы посмотреть, как это может работать!Однако, вернувшись назад, чтобы исследовать его, у меня сложилось четкое впечатление, что я пошел по этому вопросу не в MVC, что, конечно, меня немного беспокоит.
Вот что я сделал на высоком уровне.
Прямо сейчас у меня есть UIViewController ( not a UITableViewController ), который обрабатывает все общие черты между двумя представлениями, такие как выборка необработанныхданные.У меня также есть два NIB, по одному для каждого вида, и два объекта UIView , которые можно использовать вместе с ними.(Одним из них является UITableView , который является своего рода UIView .)
Я переключаюсь между представлениями с помощью анимации (достаточно просто).Кроме того, в стремлении сохранить инкапсуляцию, теперь разделенный UITableView (не UIViewController !) Действует как его собственный делегат и источник данных, извлекающий данные из VC.VC настроен как слабый, не сохраняемый объект в табличном представлении.Параллельно альтернативное представление получает необработанные данные из VC точно таким же образом.
Итак, есть несколько вещей, которые пахнут здесь смешно.Слабая связь между ребенком и родителем, хотя и вежливая, может показаться неправильной.Создание UITableView источника и делегата таблицы также кажется мне странным, если я думаю, что контроллер представления - это то место, куда вы хотите поместить это в диаграммы MVC Apple.В нынешнем виде это выглядит так, как будто представление знает о модели, что не очень хорошо.Предварительная загрузка обоих видов также кажется странной, поскольку отложенная загрузка больше не действует.Потеря преимуществ UITableViewController (например, автоматической прокрутки до ячеек с текстовыми полями) также немного расстраивает, и я бы не стал изобретать колесо, чтобы обойти это тоже.
Учитывая все вышеизложенное, и учитывая, что мы хотим, чтобы этот «эффект переворачивания» в контексте одного пятна на одном UINavigationController и учитывая, что оба представления являются двумя сторонами одной медали, существует лилучше, более очевидный способ разработать это, что я просто пропускаю полностью?Подсказки приветствуются!