手势不适用于包含 UITableViewControllers 的 UIPageViewController

Posted

技术标签:

【中文标题】手势不适用于包含 UITableViewControllers 的 UIPageViewController【英文标题】:Gestures not working for UIPageViewController that contains UITableViewControllers 【发布时间】:2017-05-22 05:54:39 【问题描述】:

我正在尝试为我的应用实现通知中心之类的功能:

有一个UIPageViewController,因为我希望向左/向右滑动手势起作用,并且在里面我需要显示 4 UITableViewControllers。顶部有一个UISegmentedCotrol 来显示“选择了哪个选项卡”

一切正常,除了用于更改页面的滑动手势,好像 TableView 正在捕获手势,而不是让 PageView 完成它的工作。

我不需要我的 TableView 是可编辑的,因为它们只是来自网站的文章。只有didSelectRowAt(indexPath) 足以做我需要做的任何事情(转到“articleViewController”)。

如果有人知道如何让UIPageViewController 的手势与TableViewController 一起工作,请告诉我。谢谢

【问题讨论】:

为此目的使用了一个库,XLPagerTabStrip 我推荐给任何有类似情况的人,因为它可以解决所有的麻烦。 【参考方案1】:

var pageviewController = UIPageViewController()

pageviewController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)

    pageviewController.view.frame = CGRect(x: 0, y: 0, width: 320 , height: 568)

    pageviewController.setViewControllers([arrayControllers[0]], direction: .forward, animated: false, completion: nil)

    addChildViewController(pageviewController)
    viewToAdd.addSubview(pageviewController.view)
    pageviewController.didMove(toParentViewController: self)

let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
    swipeRight.direction = UISwipeGestureRecognizerDirection.right

    self.view.addGestureRecognizer(swipeRight)
    let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
    swipeLeft.direction = UISwipeGestureRecognizerDirection.left
    self.view.addGestureRecognizer(swipeLeft)

func respondToSwipeGesture(gesture: UIGestureRecognizer) 
    if let swipeGesture = gesture as? UISwipeGestureRecognizer 
        switch swipeGesture.direction 
        case UISwipeGestureRecognizerDirection.right:
            //right view controller

            print("Swipe Right")

        case UISwipeGestureRecognizerDirection.left:
            //left view controller

            print("Swipe left")

        default:
            break
        
    

【讨论】:

谢谢,但这在我的情况下不起作用......我正在从 Storyboard 和代码中的每个 TableViewController 实例化 PageViewController。我想保持默认行为(能够在视觉上在“页面”之间滑动),如果我不使用 TableViewController(或者即使从普通 UIViewController 滑动到 UITableViewController 时),它可以工作,但不是相反的方式

以上是关于手势不适用于包含 UITableViewControllers 的 UIPageViewController的主要内容,如果未能解决你的问题,请参考以下文章

Hammerjs 手势不适用于 Angular 版本 11?

捏手势不适用于 SKCameraNode

单击手势不适用于以编程方式添加的子视图

离子手势不适用于 Firebase 数据?

手势识别器不适用于选项卡式应用程序

UITouch 不适用于 ios8