mui on事件 回调函数中的参数event怎么使用

mui on事件 回调函数中的参数event怎么使用,第1张

所有Widget类型的节点都支持addTouchEventListener和addClickEventListener这两个接口。可以通过些接口来接收触摸事件

addTouchEventListener的使用步骤如下(C++):

1)准备好你的widget节点,在编辑器中开启交互(或在代码中setTouchEnabled(true))。

2)定义一个函数,形式如下

void ACuteClass::onTouchEvent(cocos2d::Ref ref, Widget::TouchEventType touchType)

{

switch(touchType)

{

case Widget::TouchEventType::BEGAN:

CCLOG("on began");

break;

case Widget::TouchEventType::MOVED:

CCLOG("on moved");

break;

case Widget::TouchEventType::ENDED:

CCLOG("on ended");

break;

case Widget::TouchEventType::CANCELED:

CCLOG("on canceled");

break;

default:

CCLOG("impossible");

}

}

3)把这个函数传递给addTouchEventListener接口:

1

your_widget->addTouchEventListener(CC_CALLBACK_2(ACuteClass::onTouchEvent, this));//CC_CALLBACK_2照着写,表示有两个参数的回调

ok搞定。

addTouchEventListener的使用方法一样,不同的地方是:回调函数onTouchEvent在一次触摸中只回调一次,触发ENDED时回调。

关于点击没响应的可能:

没开启交互。

控件被挡住。

其他细节

1 如何获取触摸事件的坐标

用下面这几个接口:

getTouchBeganPosition

getTouchMovePosition

getTouchEndPosition

看名字就知道获取的是什么了吧。

2 关于ScrollView在某些情况下点到子控件不能拖动的问题

现在的Studio支持同时创建widget和非Widget类型的节点。这样会有一个问题。

Widget类型接受到触摸事件时,会把这些事件向上层传递,但是在遇到非Widget节点时会停下来。这会导致点击ScrollView等View类中的控件(两者之间有node)拖动时,拖动失败。

解决方案:

设置View中的控件的SwalloTouches属性为false。使控件不截断touch事件

改下源码:将如下代码替换掉Widget中同名函数。

void Widget::propagateTouchEvent(cocos2d::ui::Widget::TouchEventType event, cocos2d::ui::Widget sender, cocos2d::Touch touch)

{

Widget widgetParent = nullptr;

for(Node p = this;widgetParent == nullptr;)

{

p = p->getParent();

if(p)

{

widgetParent = dynamic_cast(p);

}

else

{

return;

}

}

widgetParent->interceptTouchEvent(event, sender, touch);

}

ui::TextField

类似于addTouchEventListener

1设置交互或者setTouchEnabled(true)

2编写一个监听函数:

void yourClass::textFieldEvent(Ref pSender, TextField::EventType type)

{

switch (type)

{

case TextField::EventType::ATTACH_WITH_IME:

CCLOG("获得输入焦点");

break;

case TextField::EventType::DETACH_WITH_IME:

CCLOG("获得输入焦点");

break;

case TextField::EventType::INSERT_TEXT:

CCLOG("输入了文本");

break;

case TextField::EventType::DELETE_BACKWARD:

CCLOG("获得输入焦点");

break;

default:

break;

}

}

3设置监听:

yourTextField->addEventListener(CC_CALLBACK_2(yourClass::textFieldEvent, this));

DOM结构

关于mui页面的dom,你需要知道如下规则。

固定栏靠前

所谓的固定栏,也就是带有mui-bar属性的节点,都是基于fixed定位的元素;常见组件包括:顶部导航栏(mui-bar-nav)、底部工具条(mui-bar-footer)、底部选项卡(mui-bar-tab);这些元素使用时需遵循一个规则:放在mui-content元素之前,即使是底部工具条和底部选项卡,也要放在mui-content之前,否则固定栏会遮住部分主内容;

### 一切内容都要包裹在mui-content中

除了固定栏之外,其它内容都要包裹在mui-content中,否则就有可能被固定栏遮罩,原因:固定栏基于Fixed定位,不受流式布局限制,普通内容依然会从top:0的位置开始布局,这样就会被固定栏遮罩,mui为了解决这个问题,定义了如下css代码:

[css] view plain copy

mui-bar-nav ~ mui-content {

padding-top: 44px;

}

mui-bar-footer ~ mui-content {

padding-bottom: 44px;

}

mui-bar-tab ~ mui-content {

padding-bottom: 50px;

}

你当然可以通过自定义CSS的方式实现如上类似效果,但为了使用简便,建议将除固定栏之外的所有内容,全部放在mui-content中。

始终为button按钮添加type属性

若button按钮没有type属性,浏览器默认按照type=submit逻辑处理,这样若将没有type的button放在form表单中,点击按钮就会执行form表单提交,页面就会刷新,用户体验极差。

窗口管理

页面初始化:必须执行muiinit方法

mui在页面初始化时,初始化了很多参数配置,比如:按键监听、手势监听等,因此mui页面都必须调用一次muiinit()方法;

页面跳转:抛弃href跳转

当浏览器加载一个新页面时,若页面DOM尚未渲染完毕,页面会先显示空白,然后等DOM渲染完毕后,再显示具体内容,这是WEB浏览器技术无法逾越的体验障碍;为解决这个问题,建议使用[muiopenWindow方法](>

以上就是关于mui on事件 回调函数中的参数event怎么使用全部的内容,包括:mui on事件 回调函数中的参数event怎么使用、huilder和mui开发的app获取个推推送的消息的click事件应该写在哪、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9621894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存