我们知道,H5+提供了NativeObj供开发者绘制原生的view层,通过plus.nativeObj.View.getViewById(id)来获取其view并加以控制。一个view层中,可以有很多个tags来填充,例如:
{
"id": "tabNews",
"pageInfo": {
"id": "index_message.html",
"url": "./index_message.html"
},
"styles": {
"bottom": "0px",
"left": "33%",
"height": "50px",
"width": "34%",
"backgroundColor": "#F7F7F7"
},
"tags": [
{
"tag": "font",
"id": "newsIcon",
"text": "\ue201",
"position": {
"top": "4px",
"left": "0",
"width": "100%",
"height": "24px"
},
"textStyles": {
"fontSrc": "_www/static/fonts/mui/mui.ttf",
"align": "center",
"size": "24px",
"color": "#929292"
}
}, {
"tag": "font",
"id": "newsText",
"text": "消息",
"position": {
"top": "23px",
"left": "0",
"width": "100%",
"height": "24px"
},
"textStyles": {
"align": "center",
"size": "10px",
"color": "#929292"
}
}, {
"tag": "rect",
"id": "tabBorder",
"position": {
"top": "0",
"left": "0",
"width": "100%",
"height": "1px"
},
"rectStyles": {
"color": "#ccc"
}
}
]
}
现在有如下需求:
需要将一个完整的搜索组件加以封装,组件包括搜索icon,input框、input框clearIcon。要求组件显示在title中(注意这里的title不是dom结构,而是原生的titleNView,具体可以参照H5+create方法中的titleNView),初始化显示搜索icon,点击搜索icon显示input,当input有搜索值的时候显示input的clearIcon并触发回调,点击clearIcon清除搜索内容,再次点击搜索icon隐藏input和clearIcon。
假如有三个页面,A、B、C。假设从A进入B时候初始化组件,要求从B返回A或者进入C时组件自动消失(也就是说组件是和初始化的webview在同一层而非全局view)
PS:业务逻辑应该在同一页面
需求完毕。
尝试1:
通过new几个全局的view层取填充当前webview的titleNView,通过plus.nativeObj.View.getViewById(id)的方式获取并监听点击事件以及view的显隐,在页面离开的时候手动清除所有用到的view层。
优点:一次封装,全局通用
缺点:需要手动清除全局view,例如从B返回A的时候需要在beforeBack中清除,从B进入C的时候需要在open之前清除,并且需要在C返回B的时候重新初始化。相当麻烦。要是改页面跳转逻辑复杂,手动操作的地方就非常蛋疼了。
由于缺点,我舍弃了尝试1
尝试2:
在A页面openB页面的时候,通过create的subNViews创建三个子view。控制方式同上。
优点:组件属于当前webview,不必通过手动控制清除
缺点:业务逻辑在open的页面并非当前页面,值传递需要通过自定义事件
为了解决上面的缺点,于是有了尝试3
尝试3:
通过进入页面后获取titleNView并且draw的方式实现,draw三个tags,该方式即满足了组件属于当前webview,又满足了业务逻辑在同一页面。但是,目前我并没有发现可以获取到一个view并且创建子view的方式,也没有看到获取该view下draw的tags的方法,所以就很蛋疼,不能通过tags的id获取到相应tags,那么这个tags的id有什么用?这个还好办,可以通过view层的点击位置加以判断,但是如何控制tags的显隐又很蛋疼了,tags都获取不到如何控制?即使是子view的方式我尝试了clearRect、reset、restore、hide等方法都不尽人意(IOS还好,安卓不管用)。
综上所诉,我想问问官方或者各路神仙,该需求应该如何实现?还是说现在H5+的nativeObj成熟度还不足以完美解决上诉需求?为什么不能通过id获取到各个tags?
另外,小弟还有个问题,为什么IOS获取icon只能用
newFamilyBtn.textStyles.fontSrc = '_www/static/fonts/mui/iconfont.ttf';
而安卓可以使用自己的icon
_www/static/fonts/iconfont.ttf
?
小弟是新手,如有不对之处,还望各路神仙能够耐心解答、勿喷。也欢迎大家探讨告知,谢谢!
wjsljc (作者)
UniApp IOS何时能够调试打包?初步看了一下你们的demo,感觉还只是起步阶段,demo里面都还有问题。能提供下你们的预期时间吗?我们好决定投入研究的力度和时间安排。
2018-04-10 18:02
wjsljc (作者)
另外也希望以后能将hbuilder的其他功能完善在X上例如主题变换等,期待!
2018-04-10 18:03