【已解决】3.10 版本 PageView::addEventListener()事件不能回调问题

3.2版本中的void PageView::addEventListener(const ccPageViewCallback& callback) 事件 在进行了void scrollToPage(ssize_t idx);跳转到某页面时可以回调ccPageViewCallback事件
3.10版本的这个事件还有用吗? 看了下源码, 发现 PageView::pageTurningEvent();的响应接口已不再调用, 如果才能调用到此事件呢, 我需要在和setCurrentPageIndex(index)后更新页面内容
是BUG 还是有新方法 求指点。

谢谢!

没人回吗? 这算坑吗

我也遇到了这个问题
再次表扬一下cocos团队的尿性,让我们学会了自己动手

我用的是 lua 版本开发,经过如下修改,可以暂时性修正一下没有回调这个事

1、修改 UIScrollView.cpp 的 ScrollView::processAutoScrolling(float deltaTime)

// Finish auto scroll if it ended
if(reachedEnd)
{
    _autoScrolling = false;

dispatchEvent(SCROLLVIEW_EVENT_SCROLLING, EventType::SCROLLING); // 加入此行,暂时解决 PageView scrollToPage 无回调事件的问题
}

2、在lua中,使用 cc.ScrollView.addEventListener 替代 cc.PageView.addEventListener,(CPP代码,是将handler存储在ScrollView中的)
例如:
ccui.ScrollView.addEventListener(self.box_chars, handler(self, self.onPageChange))

感谢反馈!
https://github.com/cocos2d/cocos2d-x/pull/14964
已修复

谢谢! 数字数字~~~~~~~~~

是不是這樣改比較好?

原因是,如果在事件發生時, 呼叫setCurrentPageIndex會失效,
位置會被下面moveInnerContainer給設置為停止滑動的最後位置,
而不是setCurrentPageIndex所預期index的位置

 if(reachedEnd)
 {
     _autoScrolling = false;
 }

 moveInnerContainer(newPosition - getInnerContainerPosition(), reachedEnd);

 if(reachedEnd)
 {
    dispatchEvent(SCROLLVIEW_EVENT_AUTOSCROLL_ENDED, EventType::AUTOSCROLL_ENDED);
 }

照着上面git里面的改了之后,发现依旧没有办法响应回调
pageview->addEventListener((PageView::ccPageViewCallback)CC_CALLBACK_2(Paihang::callback, this));

//触摸回调
void Paihang::callback(Ref* pSender, PageView::EventType type){
PageView* pageView1;
switch (type)
{
case cocos2d::ui::PageView::EventType::TURNING:
pageView1 = dynamic_cast<PageView *>(pSender);
index = pageView1->getCurrentPageIndex();
mingci->setString(toString(index));
score_label->setString(UserDefault::getInstance()->getStringForKey((“paihang” + toString(index)).c_str(), “0”));
name->setString(UserDefault::getInstance()->getStringForKey((“name” + toString(index)).c_str(), “player”));
log(“index=%d”, index);
break;
default:
break;
}
}
不知道具体是什么原因,望大佬告知,毕设救急啊