iPhone: пользовательское представление DataGrid, подкласс UITableView или другое? - PullRequest
4 голосов
/ 27 октября 2009

Я хотел бы создать сетку данных, которая прокручивается как по вертикали, так и по горизонтали, и имеет липкие заголовки строк и столбцов (чтобы вы могли прокручивать данные, все еще просматривая заголовки строк / столбцов). Каков наилучший способ сделать это?

Я подумал о создании собственного настраиваемого представления DataGrid, которое обрабатывает собственный рендеринг, но это кажется большой работой. Кажется, что добавление нескольких UITableViews в UIScrollView может работать, но я не знаю, как сделать первую строку и столбец липкими при прокрутке остальных из них вместе. Или, возможно, я мог бы создать подкласс UITableView и добавить к нему столбцы.

Пример чего-то похожего на то, что я ищу, см. http://www.roambi.com/. Нажмите на пример SuperList и поиграйте с представлением там.

Я успешно воссоздал эффект, который искал в UIWebView с простой таблицей HTML, пользовательским JavaScript и CSS, но при использовании этого метода производительность на iPhone ужасна.

Ответы [ 4 ]

3 голосов
/ 28 октября 2009

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

Я бы сказал об этом так:

  • Объявите протоколы DataGridViewDelegate и DataGridViewDatasource, которые имитируют их аналоги UITableView.
  • DataGridView является подклассом UIScrollView. Он имеет две ивы delegate и datasource.
  • DataGridViewCell - это подкласс UIView, аналогичный UITableViewCell.
  • Категория в NSIndexPath, аналогичная NSIndexPath(UITableView), которая упрощает использование путей индекса для адресации строк, столбцов и (необязательно, если вы хотите их реализовать) разделов.
  • DataGridView вызывает методы источника данных numberOfRowsInDataGridView: и numberOfColsInDataGridView: и методы делегата heightForCellAtIndexPath: и widthForCellAtIndexPath: (или, если не реализовано, использует свойства cellWidth и cellHeight по умолчанию) для вычисления размера сетка и установите прокрутку просмотров contentSize свойство.
  • Когда DataGridView необходимо отобразить себя или когда он прокручивается, вызовите метод источника данных dataGridView:cellAtIndexPath:, чтобы получить подпредставление для каждой отображаемой ячейки. Добавьте это как подпредставления. Реализуйте систему повторного использования ячеек, например UITableView.
  • ...

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

1 голос
/ 01 марта 2011

Это может удовлетворить ваши потребности, оно хорошо сделано: https://github.com/AlanQuatermain/AQGridView

0 голосов
/ 23 августа 2013

Я только что ответил на такой вопрос - есть еще несколько вариантов, которые я нашел:

https://github.com/AlanQuatermain/AQGridView (бесплатно)

http://ioscomponents.com/Home/Products (Коммерческий - множество функций 29 USD)

https://www.developergarden.com/en/marketplace/components/details/cmp/ios-data-grid-table-view (коммерческий 129 USD)

http://www.binpress.com/app/vertical-horizontal-scrolling-datagrid-for-ios/1082 (Коммерческий)

0 голосов
/ 01 октября 2011

Другой альтернативой может быть компонент Сетка данных iOS - он не бесплатный, но достаточно полнофункциональный, такой как удаление анимированных строк и настройка границ / цветов.

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