我的 pageviewcontroller 手势是不是被拦截?

Posted

技术标签:

【中文标题】我的 pageviewcontroller 手势是不是被拦截?【英文标题】:Are my pageviewcontroller gestures being intercepted?我的 pageviewcontroller 手势是否被拦截? 【发布时间】:2019-04-16 23:16:55 【问题描述】:

我已按照 pageviewcontroller 教程创建图像滑块。然后,我将其调整为插入到 tableviewcell 中,因为我想要表格中的图像滑块。

我喜欢在全屏或嵌入到另一个视图中使用相同代码的想法。

但是,当我这样做时,pageviewafter 和 pageviewbefore 事件在滑动时不会触发。我怀疑 tableviewcontroller 或 cell 正在吞噬事件,因此 pageviewcontroller 没有收到它们。

我充其量是一名兼职 ios 开发人员,所以寻找任何可以检查/克服我的问题的建议。

根据要求提供一些代码细节。在检索图像的回调完成后,我正在添加我的 PageViewController。 PlantPhotoContainerView 是一个静态单元格内的 UIView,它与情节提要一起添加。

self.plantPhotoContainerView.addSubview(vc.view)

pageviewcontroller 将委托设置为自己,我目前忽略了控制器中传递的图像,只使用了一些测试图像:

class ImageSliderViewController: UIPageViewController, UIPageViewControllerDataSource 
    init(images: [String]) 
        super.init(transitionStyle: UIPageViewController.TransitionStyle.scroll, navigationOrientation: UIPageViewController.NavigationOrientation.horizontal, options: nil)
    

    required init?(coder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

    var images = ["Growers", "Home", "Media"]

    override func viewDidLoad() 
        super.viewDidLoad()

        dataSource = self

        view.backgroundColor = UIColor.yellow

        let imageViewController = ImageViewController()
        imageViewController.imageName = images.first
        let viewControllers = [imageViewController]

        setViewControllers(viewControllers, direction: .forward, animated: true, completion: nil)
    

    override func viewDidLayoutSubviews() 
        self.view.translatesAutoresizingMaskIntoConstraints = false
        view.leftAnchor.constraint(equalTo: view.superview!.leftAnchor).isActive = true
        view.rightAnchor.constraint(equalTo: view.superview!.rightAnchor).isActive = true
        view.topAnchor.constraint(equalTo: view.superview!.topAnchor).isActive = true
        view.bottomAnchor.constraint(equalTo: view.superview!.bottomAnchor).isActive = true
    

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? 
        let currentImageName = (viewController as! ImageViewController).imageName!
        let currentIndex = images.firstIndex(of: currentImageName)!

        if currentIndex < images.count - 1 
            let imageViewController = ImageViewController()
            imageViewController.imageName = images[currentIndex + 1]

            return imageViewController
        

        return nil
    

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? 
        let currentImageName = (viewController as! ImageViewController).imageName!
        let currentIndex = images.firstIndex(of: currentImageName)!

        if currentIndex > 0 
            let imageViewController = ImageViewController()
            imageViewController.imageName = images[currentIndex - 1]

            return imageViewController
        

        return nil
    

【问题讨论】:

公平点,我编辑我的帖子 【参考方案1】:

好的,我最终找到了一个有帮助的帖子。添加子视图时,需要额外的两行才能将默认手势功能传递到 pageviewcontroller。希望这对其他人有帮助。

self.addChild(vc)
self.plantPhotoContainerView.addSubview(vc.view)
vc.didMove(toParent: self)

说实话,我不完全理解这是做什么的,也许更精通 swift 框架的人可以详细说明。

【讨论】:

谢谢芽。除了没有正确跳舞之外,我不确定我是否看到了对问题的详细描述哈哈,但我认为最重要的部分是视图需要是一个孩子,而不仅仅是一个行为正确的子视图,很高兴知道并且链接进一步详细说明其他人(y)

以上是关于我的 pageviewcontroller 手势是不是被拦截?的主要内容,如果未能解决你的问题,请参考以下文章

Swift:从其他视图控制器调用 PageViewController 中的函数

将 UIWebView 上的 ScreenEdgePanGesture 传递给父 PageViewController

如何快速阻止 UIPageViewController 的滑动手势?

我可以禁用UIPageViewController的页面边框手势识别器吗?刷卡一个?

禁用和启用页面视图控制器手势识别器?

swift 我的PageViewController