2013-01-07 92 views
0

上下文:我有一個自定義單元格的tableview。每個單元都有一個下載資源的按鈕。當按下一個按鈕時,應該禁用tableview中的所有其他按鈕。延遲加載tableview時更改屬性?

所以我的問題是,我無法獲得對tableview上的所有行的引用,因爲它是延遲加載。因此,當我嘗試訪問其他行時,它會失敗,因爲它沒有在開始禁用按鈕的位置添加對象。

下面是它的代碼可能是我的問題,更多的啓發:

NSMutableArray *cells = [NSMutableArray array]; 
for (NSInteger i = 0; i < [mainTableView numberOfRowsInSection:1]; ++i) { 
    WSVideoLibraryTableCell *addedCell = (WSVideoLibraryTableCell *)[mainTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:1]]; 
    NSLog(@"CELL ADDED: %@", addedCell); 
    [cells addObject:addedCell]; 
} 
if (stateEnabled) { 
    for (WSVideoLibraryTableCell *cell in cells) { 
     [[cell downloadButton] setEnabled:YES]; 
    } 
} 
else 
{ 
    for (WSVideoLibraryTableCell *cell in cells) { 
     [[cell downloadButton] setEnabled:NO]; 
    } 
} 

我嘗試添加一些代碼只需要可見的單元格。 NSArray *array = [mainTableView visibleCells]但是接下來的問題是不可見的單元格會啓用按鈕,並且在可見的行上發生奇怪的事情,它們會一次又一次出現在tableView上(與懶加載和更改它們有關嗎?)

非常感謝您的意見或建議!

回答

0

我的建議是讓每個對象都有自己的isEnabled屬性,以便您可以自己禁用對象,並根據該屬性設置延遲加載的條件以禁用它們。

延遲加載非常有用,雖然對於數量瑣碎的單元格,您將不會注意到資源消耗,但會隨着您增加正在處理的單元格數量而增加。

+0

關於對象?我想你是指我的自定義單元格。該屬性已經存在,因爲該按鈕位於單元格內部並且獲取其狀態很容易。但是我沒有得到的是你所說的延遲加載的條件來根據屬性禁用它們。我怎樣才能做到這一點?對不起,我不明白延遲加載是如何工作的... – Joze

+0

我猜你的意思是設置一個布爾鍵,當按下按鈕時。然後在延遲加載的方法(我想)'cellForRowAtIndexPath'我相應地設置單元格的屬性...我認爲這就是你的意思我會嘗試它,如果不是,請糾正我:) – Joze

+0

我假設每個cell從一個對象集合中代表了一些對象(在你的情況下,也許是一個'Resource'對象,它本身就是一個'UITableViewCell')。在這種情況下,您只需將一個屬性添加到'Resource'中,以確定它是否已啓用。然後,當您爲「Resource」對象添加單元格時,請檢查其「Enabled」屬性並相應地禁用單元格。 – NominSim

0

執行此操作最簡單的方法是爲UITableViewCell創建子類,將該字段添加到該對象(即按鈕),保留所有這些對象的列表,然後讓惰性渲染處理實際的渲染。如果你想禁用所有的按鈕,你不會進入渲染的單元格,你只需遍歷你的對象列表,禁用每個按鈕中的按鈕。