UITableView - Могу ли я охватить несколько строк или использовать вложенный UITableView? - PullRequest
3 голосов
/ 08 сентября 2011

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

enter image description here

Потенциальные решения могут быть ...

Вложение UITableViews

Я рассмотрел наличие всех компонент A в одной строке родительского UITableView со строками A1, A2 и A3 в дочернем UITableView, но я не уверен, возможно ли это?

Spanning Row

Я также не уверен, возможно ли иметь один UITableView, но иметь области в пределах нескольких строк (как, например, вы можете сделать в таблице HTML). Тогда области A, B, C и т. Д. Могут быть просто представлениями, которые охватывают их соответствующие строки.

Любые предложения приветствуются.

Ответы [ 3 ]

3 голосов
/ 10 сентября 2011

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

Лучший способ сделать это - создать пользовательские ячейки UITableViewCell, которые рисуют сами, основываясь на данных, которые они дают.Затем они могут выглядеть как ячейки, которые вы описали выше, создавая видимость нескольких ячеек, хотя каждый раздел на самом деле представляет собой одну ячейку.

Установив стиль выбора ячеек на NONE и прослушивая сенсорные события наячейка, вы даже можете сделать выбор отдельных «подэлементов».

Это довольно сложный рисунок, поэтому я рекомендую посмотреть, как это делают другие.http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/ http://cocoawithlove.com/2010/12/uitableview-construction-drawing-and.html/

Вот как я справляюсь: https://github.com/andrewzimmer906/XCell

1 голос
/ 21 сентября 2011

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

Solution

Делегат UITableView установлен как UIViewController. Делегат UIScrollView НЕ установлен.

Когда пользователь прокручивает UITableView, его метод scrollViewDidScroll запускается, и я могу прокрутить UIScrollView ту же сумму вручную в коде следующим образом ...

- (void)scrollViewDidScroll:(UIScrollView *)tableView
{
    [self.scrollView setContentOffset:tableView.contentOffset animated:YES];
}

Я должен быть немного умен, чтобы вычислять (в коде), когда страница загружает положение элементов в A, B, C и т. Д. И точную высоту представления прокрутки, чтобы оно соответствовало UITableView.

Так как я использую стандартный UITableView для A1, A2, B2, C3 и т. Д., Я могу легко управлять действием, когда пользователь выбирает строку, и все еще получаю стандартную подсветку UITableView бесплатно.

Недостатки

Пролистывание / прокрутка в UIScrollView не оказывает никакого влияния на прокрутку в UITableView. Я мог бы преодолеть это путем реализации делегата в UIScrollView и реагирования на его собственный метод scrollViewDidScroll для прокрутки UITableView, но я еще не попробовал это, и я ожидаю, что они будут проблемами, так как оба метода будут запускаться на в то же время.

Касание / касание UIScrollView не имеет никакого эффекта. Это хорошо для моих нужд, однако, если бы я хотел выполнить какое-то действие, я мог бы использовать UITapGestureRecognizer, который я делал раньше. Э.Г.

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureCaptured:)];
[self.scrollView addGestureRecognizer:tapRecognizer];

- (void)tapGestureCaptured:(UITapGestureRecognizer *)touch
{    
   CGPoint touchPoint=[touch locationInView:scrollView]; 
   // Perform action here. 
}

Надеюсь, это кому-нибудь поможет. Еще раз спасибо.

1 голос
/ 08 сентября 2011

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

  1. Наилучшим вариантом было бы изначально загрузить одну таблицу с данными A, B, C, D. и затем, когда пользователь выбирает любую из строк, скажем, например, A, затем перезагрузите таблицу и поместите A в заголовок раздела и A1 A2 и т. д. в данные. В этом случае вы должны написать много кода для обработки статуса таблицы, но это будет хорошо выглядеть.

  2. Вы можете настроить UITableViewCell и упорядочить UIView внутри него для достижения вашего шаблона. Все, что вам нужно знать, это то, как будет получаться высота строки. Это можно установить в методе делегата heightForRowAtIndexPath.

  3. Если вы хотите, чтобы составные строки (строки с A1, B1 и т. Д.) Прокручивались, вы можете добиться этого, упорядочивая таблицы в представлении прокрутки ИЛИ Scrollview в представлении прокрутки.

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