2014-12-04 54 views
0

好的,這是(或應該是)直截了當 - 除非我忽略了某些東西(可能是這種情況)。在Titanium中隱藏<TableViewRow>

我創建了一個很簡單的例子:

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)。但是,這仍然顯示標籤的一部分。然後,我可以隱藏標籤(可見=「false」工作!),然後我只看到一個「瘦」行。但與標準的查看行分隔符,你仍然可以看到有一排....

那麼,我在做什麼錯在這裏?

我使用TableView佈局來創建一個輸入數據的窗體 - 並且只有在設置了開關時纔會向用戶顯示一些行。這樣做有更好的模式嗎?

我在工作室3.4.1GA的Mac OS X 10.10.1和模擬器;-)

預先感謝您使用8.1的iOS!

/約翰

回答

0

我也在appcelerator.com的開發者Q & A上問過這個問題。我最終得到了一些關於如何解決它的建議 - 都使用Alloy標記。最好的解決方案是根據Lucky Luke的建議 - 但使用Alloy而不是使用傳統編碼風格創建TableView。

這裏是一個link to the solution I chose

對不起,我沒有來過,並在此之前添加鏈接。

/John

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黑客將爲你工作。