[已解决]CocoCocos2d JS RC0 版本pageView子对象不能点击

CocoCocos2d JS RC0 版本pageView子对象不能点击了~ BETA版是好的

我们的问题是一样的,看来用pageview的人不多。beta版是好的,rc0的mouse事件也没问题,但jsb下touch事件有问题。不过可以在pageview视框的左右点击,可以触发onTouchBegan这些事件。暂时还没找到原因。

看了一下源码 重构的UI这部分是todo
貌似代码没有写完的样子
期待官方早点修复 项目马上就要上了…

你指handlePressLogic这个函数变空了吧。这个貌似不是原因,rc0相比beta换了移动offset的计算方式,rc0用touch.getLocation().x - touch.getPreviousLocation().x这样去算了,所以可以不管第一次touch下去的起始x轴。

我估计是还要底层的问题,因为在pageview区域外的左侧和右侧,都能捕获touch事件,并且事件对象event.getCurrentTarget()就是pageview的子对象。

我们的Tests中的pageView是可以拖动的。 你否能给一个重现问题的小Demo呢?

“看了一下源码 重构的UI这部分是todo, 貌似代码没有写完的样子 ”

原因是,我们想在v3.0 rc中把Cocos UI的接口与-x统一起来,这样V3.0 正式版发布时不再改变接口。由于时间比较紧,测试工作做得不是很到位,请谅解。我们现在正在对这部分进行详细的测试与优化。

谢谢你们的反馈
David

哇,终于开发团队的人来回答了!

pageview可以滑动,但选定后,里面layout的子对象设置了touch事件,点击进入下一场景,这个点击事件出问题了。pageview的视区点击无法触发,但在其左右点击可以触发。beta版是正常的,rc0的mouse事件也是正常的。

    initPageView: function(data) {
        var roles = data.roles;
        // 新建 page view
        var self = this, pageView = ccui.PageView.create();
        pageView.setTouchEnabled(true);
        pageView.setSize(cc.size(480, 600));
        pageView.x = (winSize.width - pageView.width) / 2;
        pageView.y = (winSize.height - pageView.height) / 2 + 50;
        // 添加角色
        var role_count = roles.length;
        for (var key = 0; key < role_count; key ++) {
            var role = roles;
            //默认选择第一个角色
            if (key == 0) {
                self.lbName.setString(role.name);
                self.uInfo = {
                    name: data.name,
                    roleId: role.id,
                    sex: role.sex
                };
                /*cc.sys.localStorage.name = data.name;
                cc.sys.localStorage.roleId = role.id;
                cc.sys.localStorage.sex = role.sex;*/
            }
            var layout = ccui.Layout.create();
            layout.setSize(cc.size(480, 600));
            var layoutRect = layout.getSize();

            this.roleArray = Role.create("res/role" + key + "/role.ExportJson");
            this.roleArray.attr({
                x: layoutRect.width / 2,
                y: layoutRect.height / 2,
                //anchorX: 0,
                //anchorY: 0
            });
            //this.roleArray.x = layoutRect.width / 2;
            //this.roleArray.y = layoutRect.height / 2;
            layout.addNode(this.roleArray);

            //* 给动画node添加点击事件
            if (cc.sys.capabilities.hasOwnProperty('mouse')) {
                cc.eventManager.addListener({
                    event: cc.EventListener.MOUSE,
                    onMouseDown: this.onMouseDown,
                    onMouseUp: this.onMouseUp,
                    onMouseMove: this.onMouseMove
                }, this.roleArray);
            }
            //*/
            //*
            if (cc.sys.capabilities.hasOwnProperty('touches')) {
                cc.eventManager.addListener({
                    event: cc.EventListener.TOUCH_ONE_BY_ONE,
                    swallowTouches: true,
                    onTouchBegan: this.onTouchBegan,
                    onTouchMoved: this.onTouchMoved,
                    onTouchEnded: this.onTouchEnded
                }, this.roleArray);
            }
            //*/

            pageView.addPage(layout);
        }
        pageView.addEventListenerPageView(function(sender, type) {
            self.pageViewEvent(sender, type, roles);
        }, self);
        this.addChild(pageView);
    },
```


代码大概是这样,就是用pageview做了选角这个界面。

收到,@nonexist

我会尽快修复这个问题。

再次感谢。
David

3.1版本也还是没有修复啊,PageView只能监听滑动事件,注册的touch事件无法触发,什么情况???这样用起来好麻烦,

现在这个问题解决了吗?

sample里面有相关例子,已经可以触发点击事件了。