Как я могу воссоздать выпадающие меню в стиле TweetBot? - PullRequest
7 голосов
/ 09 ноября 2011

Приложение «TweetBot» имеет раскрывающееся меню под каждой ячейкой, которое появляется при касании ячейки. Меню выглядит как другая ячейка, прямо под повернутой ячейкой. Вот (довольно большой) снимок экрана, чтобы сделать его более понятным:

TweetBot

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

Как бы вы реализовали эту функцию (или, если вы сделали это, как вы ее достигли?) Или, что еще лучше, - уже есть реализации с открытым исходным кодом?

Ответы [ 3 ]

4 голосов
/ 18 ноября 2011

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

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

Установить тег для обоих представлений, каждый.

Сделать добавление раскрывающегося представления, прежде чем представление содержимого сделает его скрытым представлением содержимого (также представление содержимого не может иметь прозрачный фон)

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

[tableView beginUpdates];
[tableView endUpdates];

Создайте переменную экземпляра для хранения объекта NSIndexPath.Установите переменную в индексный путь нажатой ячейки.

В методе делегата табличного представления для установки высоты ячеек добавьте оператор if, чтобы высота раскрывающегося списка добавлялась к высоте выбранной ячейки (которая будет в переменной экземпляра).описано выше)

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

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

1 голос
/ 18 ноября 2011

Иордания, похоже, достигла определенного прогресса в этой области;Я сам не пытался сделать что-то подобное, но вот мое мнение:

Вставьте прозрачный UITableViewCell высотой 0px между каждым обычным UITableViewCell.Вы можете легко сделать это с помощью условного блока if(index%2) в ConfigureCellForIndexPath:

. Сделайте панель инструментов подпредставлением вашего UITableView, но расположите UITableViewCells над ним.Когда пользователь нажимает на ячейку, вы просто перемещаете панель инструментов внизу этой ячейки и анимируете прозрачную ячейку на высоту панели инструментов.

Не забудьте поместить панель инструментов перед прозрачной ячейкой послеанимация завершена.В противном случае пользователь будет отправлять сенсорные события в фиктивную ячейку

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

Удачи!

1 голос
/ 18 ноября 2011

Ответ: с большим трудом. Особенно, если ваши UITableViewCells являются полупрозрачными и имеют «сгруппированный» стиль табличного представления, как было в моей ситуации.

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

  1. Подкласс UITableViewCell - например, ExtendableTableViewCell .

  2. Создайте простой класс для управления расширением ячеек.

  3. Из этого простого класса пусть он вызывает метод ExtendableTableViewCell, например, exteCell , когда ячейка должна быть продлен.

  4. В exteCell добавьте соответствующую анимацию расширения. Есть все виды хитрости анимации с маскировкой, границами и точками привязки необходимо в случае полупрозрачных ячеек - то, что я до сих пор не совершенствуется.

Если кто-то может найти лучший способ сделать это или у него есть какие-либо идеи относительно того, как я могу решить проблемы с анимацией или с хорошим расширением нижней ячейки в разделе, то, пожалуйста, скажите!

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