1

我将一个视图 (viewB) 放在另一个视图 (viewA) 的顶部。下面viewA有两个按钮,btn1可以点击,btn2不能点击。理想情况下,我想将点击传播从 viewB 传递到 btn2。

我意识到问题在于 viewB 上的 zIndex 高于 viewA,这意味着 btn2 在技术上在它后面,尽管按钮是完全可见的。

无论如何都要在不重组的情况下传递点击传播?

这是真实代码的一个非常简化的版本,简单地将 btn2 添加到 viewB 是不可能的,btn2 在真实代码中的确切位置是未知的,它是许多其他视图的子视图,它们都有自己的顶部和左侧。

如果不可能,我同样有兴趣听到。谢谢。

为 iPhone/iPad 构建 Ti.SDK 2.0.2.v20120417133255 Ti.Studio 2.0.1 xCode 4.3.2

var w

in = Titanium.UI.createWindow({  
    backgroundColor:'#fff'
});

var viewA = Ti.UI.createView({
        backgroundColor: '#DDD',
});

var btn1 = Ti.UI.createButton({
        top: 50,
        title: 'Click 1',
        height: 50,
        width: 150,
        zIndex: 100,
});
btn1.addEventListener('click', function(){
        alert('click 1');
});
viewA.add(btn1);


var btn2 = Ti.UI.createButton({
        top: 150,
        title: 'Click 2',
        height: 50,
        width: 150,
        zIndex: 100,
});
btn2.addEventListener('click', function(){
        alert('click 2');
});
viewA.add(btn2);

var viewB = Ti.UI.createView({
        top: 120,
        zIndex: 20,
        borderWidth: 1,
        borderColor: '#0000FF',
        // backgroundColor: '#0000FF',
        // opacity: 0.5
});

win.add(viewA);
win.add(viewB);


win.open();
var win = Titanium.UI.createWindow({  
    backgroundColor:'#fff'
});

var viewA = Ti.UI.createView({
        backgroundColor: '#DDD',
});

var btn1 = Ti.UI.createButton({
        top: 50,
        title: 'Click 1',
        height: 50,
        width: 150,
        zIndex: 100,
});
btn1.addEventListener('click', function(){
        alert('click 1');
});
viewA.add(btn1);


var btn2 = Ti.UI.createButton({
        top: 150,
        title: 'Click 2',
        height: 50,
        width: 150,
        zIndex: 100,
});
btn2.addEventListener('click', function(){
        alert('click 2');
});
viewA.add(btn2);

var viewB = Ti.UI.createView({
        top: 120,
        zIndex: 20,
        borderWidth: 1,
        borderColor: '#0000FF',
        // backgroundColor: '#0000FF',
        // opacity: 0.5
});

win.add(viewA);
win.add(viewB);


win.open(
);

4

1 回答 1

0

我敢肯定,在我回答这个问题并在我的应用程序中实施了解决方案之后,有人会以更好的方式回来!

我研究了几种方法来解决这个问题,找到 btn2 的确切位置并将其添加到 view2,自动高度通常会导致问题,最终会在 +-20px 内。还不够好。

我采用的解决方案是通过从许多其他视图(topView、leftView、rightView 和 bottomView)创建 view2 在 vi​​ew2 层打一个洞,然后这些将相互缓冲,并在 btn2 所在的位置留下一个洞位于。该解决方案严重影响了可扩展性。添加btn3,btn4...创建view2所需的视图数量越来越多,越来越难以布局。

我知道这个解决方案的缺点,并且只建议它作为一种选择,直到找到更好的东西。

于 2012-05-15T11:05:05.760 回答