UITableView, встроенный в UIPageViewController (ScrollStyle), не может быть задействован — didSelectRowAtIndexPath не сработал

#ios #uitableview #uipageviewcontroller

#iOS #uitableview #uipageviewcontroller

Вопрос:

Моя архитектура viewcontrollers такова:

     mainViewController(full-screen)
             |
             V
   pageViewController(part-of-screen)
         |             |
         V             V
tableViewController1 tableViewController2
  

В отличие от большинства существующих сообщений, для UIPageViewController установлено значение style: UIPageViewControllerTransitionStyleScroll, что означает, что pageVC.gestureRecognizers пуст, и я НЕ могу найти tapGuesture для отключения.

Я искал сайт целый день и не нашел решения (большинство ответов связаны с pageCurlStyle). То, что я пробовал, включает:

  1. установка делегата TableViewController.view для MainViewController, бесполезно
  2. реализовать распознаватель жестов: shouldReceiveTouch, даже не вызывается
  3. pageVC.gestureRecognizers пуст

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

Мой код прилагается ниже, некоторые пояснения:

  1. UIPageViewController * pageVC является элементом данных MainViewController)
  2. listVCs содержит UITableViewControllers

код:

 // 3. create page view controller
pageVC = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll          navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
pageVC.dataSource = self;
pageVC.delegate = self;
pageVC.doubleSided = NO;
pageVC.view.frame = _viewLayoutRef.frame;

// 3.1 set the VCs into pageVC
NSArray* aVC = @[[listVCs objectAtIndex:0]];
[pageVC setViewControllers:aVC direction:UIPageViewControllerNavigationDirectionForward animated:NO     completion:nil];

// 3.2 hook page view controller
[self addChildViewController:pageVC];
[self.view addSubview:pageVC.view];
[pageVC didMoveToParentViewController:self];
  

Комментарии:

1. Можете ли вы попробовать UITableView вместо контроллера UITableView, потому что он работает у меня.

2. @jailani спасибо за ваш комментарий. Но UIPageViewController — это контейнер контроллера, который управляет UIViewControllers, а не самим UIView. Я не уверен, как добавить UITableView в UIPageViewController без UITableViewController…

3. Из вашей иерархии представлений… Вы правильно передаете контроллеры просмотра (UITableViewController) в контроллер uipageview… Вместо UITableViewController вы можете создать uiviewcontroller, в который вы можете добавить UITableView

4. @jailani Это потрясающе, ты потрясающий! Это работает, как вы это находите?… Я думал, что UIViewController UITableView == UITableViewController, но оказывается, что они такие разные. Спасибо! НО один оставшийся вопрос: почему это работает? Это так волшебно…

5. Я думал, что у вас нет файлов .h .m для вашего контроллера uitableview, поэтому я предлагаю только этот способ.

Ответ №1:

Из вашей иерархии представлений…Вы передаете контроллеры просмотра ( UITableViewcontroller ) UIPageViewController вправо? Вместо UITableViewController вы можете создать UIViewController , в который вы можете добавить UITableview .

Комментарии:

1. Как это будет работать ..?!?! У меня точно такая же проблема, и у меня есть ViewControllers с UICollectionView внутри них, но я нахожу проблемы с выбором там тоже ..!

2. Не могли бы вы объяснить свою проблему?