【问题标题】:Appcelerator Titanium: Hidden search bar slides into view when a new window is openedAppcelerator Titanium:打开新窗口时隐藏的搜索栏会滑入视图
【发布时间】:2014-08-27 13:33:04
【问题描述】:

我已经使用钛合金框架实现了 iOS 的隐藏搜索栏,使用 TableView 上的 searchHidden 属性。

起初效果很好,搜索栏是隐藏的...但是当用户点击菜单项并打开一个新窗口时,它会导致搜索栏突然出现,因为新窗口正在以动画形式出现。然后当用户使用 TableView 回到原来的窗口时(通过点击Back),搜索栏就在那里,它应该被隐藏。

这是我的看法:

<Alloy>
    <NavigationWindow id="navWin">
        <Window class="container">
            <TableView onClick="doClick" id="theTable" searchHidden="true">
                <SearchBar></SearchBar>
                <TableViewRow title="Item One"></TableViewRow>
                <TableViewRow title="Item Two"></TableViewRow>
                <TableViewRow title="Item Three"></TableViewRow>
                <TableViewRow title="Item Four"></TableViewRow>
                <TableViewRow title="Item Five"></TableViewRow>
                <TableViewRow title="Item Six"></TableViewRow>
                <TableViewRow title="Item Seven"></TableViewRow>
                <TableViewRow title="Item Eight"></TableViewRow>
                <TableViewRow title="Item Nine"></TableViewRow>
            </TableView>
        </Window>
    </NavigationWindow>
</Alloy>

这是我的控制器:

function doClick() {
   var win = Ti.UI.createWindow({
       title: "Window",
       backgroundColor: "#FFF"
   });
   $.navWin.openWindow(win, {animated: true}); 
};

$.navWin.open();

【问题讨论】:

    标签: ios titanium titanium-mobile appcelerator titanium-alloy


    【解决方案1】:

    是的,我也面临同样的情况,其中一种解决方案是设置 setSearchHidden 方法以调用窗口的 onFocus,类似于:

    $.mainwin.addEventListener("focus",function(){
        $.theTable.setSearchHidden(true);
    });
    

    这里考虑mainwin是Window的id。

    更新

    好的,我还有一个解决方案,但它需要在您的事件侦听器中进行更改。

    您必须在每个 tableViewRow 中添加一个视图,并且必须将视图的 bubbleParent 设置为 false,并且必须将打开另一个窗口的事件侦听器添加到新添加的视图中,然后您的搜索栏将无法发挥作用。

    类似:

    <TableViewRow title="Item One" bubbleParent="false" >
         <View bubbleParent="false" onClick="doClick"></View>
    </TableViewRow>
    

    由于更新 1 不能处理超过一行,所以这里是 更新 2

    在焦点上添加以下内容,并且不要忘记在打开窗口时隐藏搜索。

    $.mainwin.addEventListener("focus",function(){
        $.theTable.setSearchHidden(true);
    
        setTimeout(function(){
            $.search.show();
        },1000);
    

    });

    虽然它也有点笨拙,但搜索是隐藏的。

    【讨论】:

    • 这会在返回主窗口后再次隐藏搜索栏。但是,当您打开一个新窗口时,它仍然会弹出视图,然后当您返回主窗口时,它会以动画方式消失,这看起来很生涩。有没有办法在来回导航时隐藏搜索字段,除非用户下拉查看它?
    • 谢谢Dragon,这似乎可行,但视图占用了整个屏幕高度的空间。所以当我给它一个固定的高度时,searchBar 的问题又回来了。也许视图只是掩盖了问题?
    • 哦,我没有尝试设置一些高度。是的,似乎视图掩盖了问题。从我的角度来看,唯一的解决方案似乎是使用第一个解决方案,以及在搜索栏上使用隐藏和显示,在打开新窗口时隐藏它并在焦点上显示它。虽然它有点笨拙,但搜索栏是隐藏的。检查更新。
    猜你喜欢
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2010-10-28
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多