不响应触摸消息的ScrollView却可以响应子控件的触摸消息滚动

hi, all
标题有点拗口, 我这边的场景简化下来是这样的, 有一个ScrollView, 上面有个子控件ImageView, ImageView又有一个子控件Button

ScrollView在编辑器当中取消交互选项, 滚动方向是垂直+水平, button正常响应触摸消息( <- 简单的addTouchEventListener)
正常在ScrollView上进行拖动, 由于取消了交互, ScrollView无法滚动, 这个符合预期效果
但是当我在Button上面进行拖动的时候, ScrollView同时也进行了滚动, 感觉似乎是子控件触摸消息传递给父控件的时候, 父控件在消息响应时并没有判断自己的Touch Enabled情况( <- 猜测, 未查看源代码验证 )
我想要的效果是当我在按钮上进行拖动的时候, ScrollView不会响应滚动, 让Button吞掉这个消息不往ScrollView传递, 那我应该如何处理, 求指导

bool Widget::onTouchBegan(Touch *touch, Event unusedEvent)
{
_hitted = false;
if (isVisible() && isEnabled() && isAncestorsEnabled() && isAncestorsVisible(this) )
{
_touchBeganPosition = touch->getLocation();
if(hitTest(_touchBeganPosition) && isClippingParentContainsPoint(_touchBeganPosition))
{
_hitted = true;
}
}
if (!_hitted)
{
return false;
}
setHighlighted(true);
Widget
widgetParent = getWidgetParent();
if (widgetParent)
{
widgetParent->interceptTouchEvent(TouchEventType::BEGAN, this, touch);
}
pushDownEvent();
return true;
}

void ScrollView::interceptTouchEvent(Widget::TouchEventType event, Widget sender,Touch touch)
{
Vec2 touchPoint = touch->getLocation();
switch (event)
{
case TouchEventType::BEGAN:
_touchBeganPosition = touch->getLocation();
handlePressLogic(touch);
break;

    case TouchEventType::MOVED:
    {
        float offset = (sender->getTouchBeganPosition() - touchPoint).getLength();
        if (offset > _childFocusCancelOffset)
        {
            sender->setHighlighted(false);
            _touchMovePosition = touch->getLocation();
            handleMoveLogic(touch);
        }
    }
        break;
        
    case TouchEventType::CANCELED:
    case TouchEventType::ENDED:
        _touchEndPosition = touch->getLocation();
        handleReleaseLogic(touch);
        break;
}

}

除非修改引擎, 否则无法介入向父类传递这一过程, 看来得换个方案:5:

我也遇到这个问题了,请问最后是怎么解决的

用button->setPropagateTouchEvents(false) 可以取消button向上传递这个事件。

setPropagateTouchEvents
这个是UIButton的方法吗?……

这个是widget的方法。
Button继承自他。

哦哦谢谢回答> <
之前找了下没找到,发现似乎3.2没有这个…

3.2下的话。。。
有个方案:
GUI机制中touch事件会向上传递。但是不会传递到非GUI对象上,所以你可以在对象和ScrollView之间加一个Node节点。

东扬冬阳 给一个例子吧