Ios 如何使UIScrollView在UIScrollView中同时运行

Ios 如何使UIScrollView在UIScrollView中同时运行,ios,swift,uiscrollview,uipangesturerecognizer,Ios,Swift,Uiscrollview,Uipangesturerecognizer,我使用的是一个UIScrollView(UIScrollView_1),允许分页在3个页面之间水平移动。 在最后一页上有多个UIScrollView(每个都在自己的单元格中)(UIScrollView_2),当水平向右(向前)滚动时,显示最后一页(根据滚动的单元格加载)。 但是如果向左(向后)滚动,我希望UIScrollView_1接管并向后滚动。 如果我向上移动手指并注册一个新的触摸事件,这将按预期工作。但我希望它在同一个盘上同时在两个UIScrollView之间运行 |-----------

我使用的是一个UIScrollView(UIScrollView_1),允许分页在3个页面之间水平移动。
在最后一页上有多个UIScrollView(每个都在自己的单元格中)(UIScrollView_2),当水平向右(向前)滚动时,显示最后一页(根据滚动的单元格加载)。
但是如果向左(向后)滚动,我希望UIScrollView_1接管并向后滚动。
如果我向上移动手指并注册一个新的触摸事件,这将按预期工作。但我希望它在同一个盘上同时在两个UIScrollView之间运行

|-------------UIScrollView_1----------|    
| Page_1 | Page_2 |--UIScrollView_2---|  
..................|...Page_3|Page_4...|
我想要的是在UIgestureRecognitizerDelegate中同时使用shouldRecognitize。
但是,当我尝试将两个UIScrollView“委托给同一个ViewController时,错误“UIScrollView的内置平移手势识别器必须将其滚动视图作为委托。”显示在滚动视图上

有没有办法解决这个问题

更新

这是来自page_3的UIViewController的cellForRow,它不会导致委托错误,但UIScrollViews不会同时起作用。(例如,需要上下移动手指以检测其他UIScrollView

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "random", for: indexPath)
    return cell
}
这是导致“UIScrollView的内置平移手势识别器必须将其滚动视图作为其代理”的cellForRow命令-错误


我想你应该用像这样的东西

func gestureRecognizer(UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer:UIGestureRecognizer) -> Bool {
    if page3 {
        return true
    }
}
在ScrollView_2的UIViewController上,将ScrollView_2的(而不是手势)委托作为ViewController

ScrollView_2.delegate = self
UIPanGesture.delegate = ScrollView_2
我解决了它。
UIScrollView的内置UIPangestureRecognitor必须委托给它自己的UIScrollView,因为错误“UIScrollView的内置平移手势识别器必须将其滚动视图作为其委托。” 相反,将UIScrollView子类化并创建第二个UIPangestureRecognitor,然后它将与内置的UIPangestureRecognitor同时工作

步骤1-4:

  • 对单元格的UIScrollView进行子类化,并创建第二个UIPangestureRecognitor

  • 将UIgestureRecognitizerDelegate添加到CellScrollView,并使shouldRecognitizeSimultaneously返回true。
    第二个UIPangEstureRecognitor现在将与内置的UIPangEstureRecognitor同时工作

    类CellScrollView:UIScrollView、UIgestureRecognitizerDelegate{

     var panGesture : UIPanGestureRecognizer!
    
     override func awakeFromNib() {
         panGesture = UIPanGestureRecognizer.init(target: self, action: nil)
         addGestureRecognizer(panGesture)
     }
    
     func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
         return true
     }
    
    }

  • 在cellForRow中,将新创建的UIPangestureRecognitor委托给UIScrollView_1的UIViewController

    func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{

    if medicines.isEmpty {
        return tableView.dequeueReusableCell(withIdentifier: "emptyMedCell", for: indexPath)
    }
    let cell = tableView.dequeueReusableCell(withIdentifier: "random", for: indexPath)
    let scrollView_1_VC = self.parent
    cell.cellScrollView.panGesture.delegate = scrollView_1_VC
    return cell
    
    }

  • 最后,在ScrollView_1的UIViewController中,让shouldRecognizeSimultaneously返回true

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
    
    }


  • 是的,这就是我正在尝试的。但是当我将UIScrollView_2的UIPangestureRecognitor委托给UIViewController时,错误“UIScrollView的内置平移手势识别器必须将其滚动视图作为其委托。”出现,应用程序崩溃。如果没有委托,ShouldRecognitizeWithGestureRecognitor将不会注意到ScrollView_2.我不理解你的示例。我用委派功能更新了我的问题。你能在你的示例中使用我的代码吗?@alengqvist抱歉,我无法理解你在代码中试图做什么,因此我无法进一步帮助你
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true