Webview事件未被触发

时间:2015-05-14 08:44:59

标签: ios webview titanium titanium-alloy

我正在使用ds.slideMenu窗口小部件,它具有以下视图:

<Alloy>
<View id="containerview">
    <View id="leftMenu">
        <TableView id="leftTableView" />
    </View>
    <View id="movableview">
        <View id="shadowview">
            <View id="navview">
                <Button id="leftButton" />
            </View>
            <View id="contentview" />
        </View>
    </View>
</View>
</Alloy>

以及显示webview的视图如下:

<Alloy>
<View class="container">
  <WebView id="webview" url="myremoteurlhere" onLoad="construct"/>
</View>
</Alloy>

要介绍ds.slideMenu的代码所做的事情,以下是更改视图后会发生的事情:

function rowSelect(e) {
  if (Alloy.Globals.currentView.id != e.row.customView) {
    $.ds.contentview.remove(Alloy.Globals.currentView);
    currentView = Alloy.createController(e.row.customView).getView();
    currentView.touchEnabled = true;
    Alloy.Globals.currentView = currentView;
    $.ds.contentview.add(currentView);
  }
}

movableview有一个addEventListener用于&#39; touchstart&#39;,&#39; touchend&#39;,&#39; touchmove&#39;并且肯定是得到事件而不是我的webview。现在,webview加载没有问题,但在iOS模拟器上触摸事件不起作用。点击加载的页面,没有任何反应。

请提供任何提示?

1 个答案:

答案 0 :(得分:0)

答案是willHandleTouches webview属性设置为false。 从官方文档:

  

明确指定此Web视图是否处理触摸。   在iOS平台上,如果此Web视图或其任何父视图具有触摸侦听器,则Titanium组件将拦截所有触摸事件。这可以防止用户与本机Web视图组件进行交互。   将此标志设置为false可禁用默认行为。将此属性设置为false允许用户与本机Web视图进行交互,并仍然可以接受发送给其父项的任何触摸事件。当用户与Web视图本身交互时,不会生成任何触摸事件。   如果要从Web视图接收触摸事件,并且用户不需要直接与Web内容交互,请将此标志设置为true。

所以

<WebView id="<mywebviewid>" willHandleTouches=false url="<myurlhere>"/>

将按预期工作。