2013-10-14 43 views
1

我正在創建一個基於表格視圖的iPhone應用程序,我需要禁用一個整個表格視圖單元格。如何逐個禁用UITableViewCell選擇?

要求就像 -

案例-1: -

最初僅第一表格單元行應爲用戶交互啓用,其餘應禁用。我們可以很容易地做到這一點,使CellForRowAtIndexPath方法中的indexPath.row 0啓用。

案例2: -

如果用戶將在第一個單元格,當他再次會回來的挖掘,然後第一個單元格將禁用和第二單元應該能(其餘表格單元格會在這個時候第二個後禁用細胞)。

案例3: -

再次,如果用戶敲擊第二表格單元格,然後回來這個表,然後從三單元分開,其他應禁用等等...

這意味着我需要依次禁用所有表格單元格。可以通過設置索引但它不是正確的方法來做到這一點。所以,你能告訴我什麼條件我需要給這個?請建議我進一步處理。

謝謝。

回答

0

有很多方法可以做到這一點(從現在開始,我假設線性表格視圖,只有一行,只有一行)。

例如,您可以將BOOL enabled屬性添加到您的單元模型對象。在您的控制器的didSelectRowAtIndexPath:中檢查該屬性,如果它設置爲NO,則不執行任何操作。如果設置爲YES,則導航到適當的頁面並將enabled屬性與位於索引位置i + 1的屬性(或位置0,如果它是最後一個條目並且您想要循環)交換。

1

只需維護一個實例變量,它包含應該啓用的單元格編號。 enabledCell。

將enabledCell初始化爲0.在didSelectRow increment enabled enabledCell中重新載入tableView。如果indexPath與enabledCell值相同,則在indexPath中的行的單元格中只啓用該單元格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    // write code to dequeue or create new UITableViewCell here 
    // then check if index is same as the cell that should be enabled 
    if(index.Path.row == enabledCell) 
     cell.userInteractionEnabled = NO; 
    else 
     cell.userInteractionEnabled = YES; 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
    //Assuming you have number of rows stored in variable numberOfRows 
    enabledCell++; 
    if(enabledCell == numberOfRows) 
     enabledCell = 0; 
    [tableView reloadData]; 
} 
+0

@KedarThanks您的想法,但也有一些是錯誤的,應該是這樣,如果(indexPath.row == enabledCell)然後cell.userInteractionEnabled =是;否則它將不會有用戶交互。一個贊成你最好的建議......謝謝 –