在Titanium中隐藏<tableviewrow> </tableviewrow>

时间:2014-12-04 11:48:48

标签: ios titanium visible titanium-alloy

好的,这是(或应该)直截了当 - 除非我忽略了某些事情(可能就是这种情况)。

我创建了一个非常简单的例子:

INDEX.XML

<Alloy>
    <Window>
        <TableView>
            <TableViewSection>
                <TableViewRow>
                    <Label>Row 1</Label>
                </TableViewRow>
                <TableViewRow visible="false">
                    <Label>Row 2</Label>
                </TableViewRow>
                <TableViewRow id="row3">
                    <Label>Row 3</Label>
                </TableViewRow>
            </TableViewSection>
        </TableView>
    </Window>
</Alloy>

...和index.tss:

"#row3":{visible:false}

"Window": {
    top: 60
}

我原以为没有显示第2行和第3行。但是,所有行都显示(在iOS模拟器中)。

我已经阅读过早期版本的Titanium Studio中的类似问题。这些2-4岁的帖子的解决方法是将tableviewrow的高度设置为1(忽略0)。但是,这仍然显示了标签的一部分。然后我可以隐藏标签(visible =“false”workst for that!)然后我只看到一个“瘦”行。但是使用标准视图行分隔符,您仍然可以看到有一行....

那么,我在这里做错了什么?

我使用TableView布局创建用于输入数据的表单 - 如果设置了开关,则只应向用户显示某些行。这样做有更好的模式吗?

我在Studio 3.4.1GA,Mac OS X 10.10.1以及在模拟器中使用8.1 iOS; - )

提前谢谢!

/约翰

2 个答案:

答案 0 :(得分:0)

我不确定这是否是最佳方法,但您可以尝试在控制器内填充您的部分。

您将使用所有(并且仅)您希望每次显示的行填充数组,然后更新TableViewSection的rows属性。 我引用一些伪代码:

var section = Ti.UI.createTableSection({...});
var row1 = Ti.UI.createTableViewRow({...});
var row2 = Ti.UI.createTableViewRow({...});
var row3 = Ti.UI.createTableViewRow({...});

var rows_options = [];
if (show_less) rows_options.push(row1, row2); //"hide" 3rd row
else rows_options.push(row1, row2, row3); //show all 3 rows

section.rows = rows_options;



或者,如果没有必要,请考虑不使用tableview,而是使用layout: vertical托管您的行来构建自己的视图,这将大大模拟相同的用途。在这种情况下,我相信visible黑客会对你有用。

答案 1 :(得分:0)

我也在开发人员问过这个问题&#39; appcelerator.com上的Q&amp; A。我最后得到了一些关于如何解决它的建议 - 两者都使用Alloy标记。最好的解决方案是Lucky Luke建议的 - 但使用Alloy而不是使用传统的编码风格创建TableView。

这是link to the solution I chose

很抱歉,我之前没有来过这里的链接。

/约翰