2013-07-31 3 views
8

У меня есть UIScrollView (с пейджингом), к которому я добавляю три UIViews. Каждый из этих UIViews имеет UITableView внутри. Таким образом, пользователь должен иметь возможность прокручивать по горизонтали на нужную ему страницу, а затем прокручивать по вертикали в соответствующей таблице.Проблемы с прокруткой UITableView, когда внутри UIScrollView

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

Я использовал настройки по умолчанию для UIScrollView, для этих единиц, определенных в viewDidLoad за исключением:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    //Load the view controllers 
    [self loadViewControllers]; 

    //Configure the scroll view 
    self.scrollView.pagingEnabled = YES; 
    self.scrollView.contentSize = CGSizeMake(CGRectGetWidth(self.scrollView.frame) * viewControllers.count, CGRectGetHeight(self.scrollView.frame)); 
    self.scrollView.showsHorizontalScrollIndicator = NO; 
    self.scrollView.showsVerticalScrollIndicator = NO; 
    self.scrollView.scrollsToTop = NO; 
    self.scrollView.delegate = self; 

    //Configure the page control 
    self.pageControl.numberOfPages = viewControllers.count; 
    self.pageControl.currentPage = 0; 
} 

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

Заранее благодарен!

ответ

2

Вещи, которые я хотел бы проверить:

  1. Проверьте папку иерархий - это то, что закладывается на верхней части UITableView, в результате чего он не получить кран?
  2. Являются ли ваши UITableViews отключенными в любом месте? Я бы установил точку останова в tableView:didSelectRowAtIndexPath: и посмотрел, вызывается ли этот метод.
  3. Проверить this post

Я думаю, это не те безошибочных ответы, но мы надеемся, что они помогут обнаружить проблему!

+0

Хм, у меня нет других взглядов.Иерархия в настоящее время что-то вроде этого: UIView - UIScrollView --- UIView ----- UITableView Однако, вы совершенно правы ... Tableview: didSelectRowAtIndexPath не вызывается во время "попытки" свитка. Но я не отключу его (намеренно, по крайней мере). Любая идея, почему она станет инвалидом? – Sagito

+0

Вызываются ли какие-либо методы делегата/источника данных для ваших UITableView? – hgwhittle

+1

Да, у меня есть UIViewController для каждого UITableView, который является как делегатом, так и источником данных таблиц. – Sagito

4

Попробуйте установить

self.scrollView.delaysContentTouches = YES; 
self.scrollView.canCancelContentTouches = NO; 

Возможно UIScrollView не проходят сенсорную информацию к подвидам.

+0

Я пробовал это решение через интерфейс, но не работал. Должен ли я делать это в коде или это то же самое? – Sagito

4

Я попытался воспроизвести упрощенную версию ваших потребностей, используя в основном Interface Builder, и мне кажется, что он работает с использованием базового кодирования и использует настройки по умолчанию. Можете ли вы проверить мой быстрый n грязный репозиторий Github и попросить ответить, применимо ли оно к вашей ситуации или отсутствию.

https://github.com/codedad/SO_ScrollView_with_Tables

По умолчанию Interface Builder создает UIScrollView и UITableViews позволяет:

  • Задержки Содержимое прикосновений
  • Cancellable Content прикосновений
+0

Спасибо! Я попробую это и вернусь к вам! :-) – Sagito

+0

Я не использовал в своем примере отдельные контроллеры представлений для всех таблиц, так как один контроллер представления, действующий как источник данных для всех таблиц, достаточно, так как вы можете использовать параметр tableView в качестве cellForRowAtIndexPath и numberOfRowsInSection для различения различных таблиц. – nzs

+0

Ну, похоже, что вы и @ hw731 были правильными, потому что в вашем примере и в ссылке, размещенной hw371, разница была в размере UITableView. Мои таблицы были в нескольких пикселях слишком большими, тогда как в вашем примере они правильно подходили, и это, казалось, было проблемой с моим кодом. :-) Огромное спасибо! – Sagito

0

Это работал для меня

Я программный союзник добавил tableView к моему просмотру прокрутки, используя addSubview:

UIGestureRecognizerDelegate не требуется.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 

    if ([touch.view isDescendantOfView:self.signUpJammerList]) { 

     return NO; 
    } 
    return YES; 
} 
Смежные вопросы