как управлять стеком UITableView без контроллера навигации - PullRequest
2 голосов
/ 21 октября 2010

Я новичок в разработке для iPhone и работаю над модификациями существующего приложения для iPhone. Общий обзор проблемы заключается в следующем.

У меня есть кнопка, отображающая всплывающее окно, содержащее UITableView.

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

Проблема в том, что я не использую навигационный контроллер. первоначальный разработчик хочет только добавить UITable Views в стек, добавлять переходы между ними при переходе из одного меню в другое. В большинстве учебных пособий, которые я видел и пытался использовать контроллер навигации и Интерфейсный Разработчик, чтобы связать UITableViews.

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

есть мысли о том, как это можно сделать? При необходимости я могу опубликовать некоторый код, хотя я думаю, что общее описание должно быть в состоянии позвонить одному из вас, умные ребята!

Ответы [ 2 ]

1 голос
/ 23 октября 2010

Это может быть сделано несколькими способами.

  1. Я не сделал этого первого, но вы, вероятно, можете создать UINavigationController и установить его вид на соответствующий фрейм (внутри пузыря) скрытьпанель навигации и установите действие кнопки «Назад», чтобы отобразить текущий вид контроллера.
  2. Другой метод состоит в том, чтобы иметь несколько табличных представлений на одном контроллере, методы делегата и источника данных имеют UITableView в качестве аргумента, чтобы вы могли различать их при установке высоты строк, заголовков и т. Д. И при возврате UITableViewCell.
  3. Способ, который я выбрал для работы с такими конфигурациями, состоит в том, чтобы иметь один UITableView и иметь только изменение источника данных.Когда вы перезагружаете, вставляете, удаляете строки или перезагружаете всю таблицу, вы можете изменить все, что захотите, в зависимости от текущего уровня источника данных.Самый простой, но не анимационный способ - перезагрузить всю таблицу.

    a) Если ваши "параметры" выходят за пределы экрана по высоте (вам нужна фиксированная высота), измените представление таблицы - (CGFloat): (UITableView *) таблицы heightForRowAtSection: (NSInteger)

    b) Если ваши "параметры" выходят за рамки экрана, либо сделайте текстовую метку по умолчанию для вашей ячейки гибкой: cell.textLabel.adjustsFontSizeToFitWidth = YES;cell.textLabel.minimumFontSize = 14;или иметь настраиваемые ячейки (рекомендуется использовать подклассы поиска UITableViewCell) для каждого уровня источника данных.

    • Если вы создаете подкласс TableViewCells, не забудьте иметь разные идентификаторы ячеек очереди для каждого уровня, поэтому таблица не предоставляет вамс классом ячеек другого уровня.

Для «стека» табличных представлений или источников данных у вас может быть NSMutableArray с addObject для push и removeLastObject для pop.Для анимации UITableViews могут анимировать свои строки / разделы для 3. (см. Документацию для вставки, удаления, перезагрузки - Справочник по классам UITableView строк / разделов), для 2. Вы даже можете иметь анимации UIView (если не CoreAnimation, как предложил Grimless), которыепереместите текущий вид таблицы влево (setFrame :) и следующий вид таблицы справа (setFrame за кадром до анимации, а затем на место в предложении beginAnimation-commitAnimation), но убедитесь, что вы добавляете виды таблиц в контейнерное представление (внутренность пузыря)), который обрезает свои подпредставления.

1 голос
/ 22 октября 2010

Oi.Это будет сложно.Мое предложение будет поддерживать вашу собственную реализацию стека.Затем используйте CoreAnimation для добавления / удаления UITableViews из контроллера основного представления для получения анимированных эффектов.Поэтому всякий раз, когда пользователь нажимает на элемент в текущем табличном представлении, соответствующий контроллер создает новый контроллер и табличное представление, а затем пользовательский контроллер навигации помещает старый в стек, удаляет старое табличное представление из основного представленияновый контроллер в качестве текущего и добавляет новое табличное представление в основное представление.Вроде грязно, но я думаю, что это сработает.

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