2015-10-26 127 views
0

我有一個UITableView選擇導致詳細視圖。我有一個BarbuttonItem,名爲比較啓用編輯模式(在Storyboard中檢查多個編輯)。UITableView編輯中的多項選擇 - 最多兩行選擇?

我希望用戶能夠精確地選擇兩個條目(當選擇兩個時,另一個OK按鈕將可用,否則只有取消按鈕將被啓用)。

我能夠啓用基於選定行的數量的OK按鈕,但我怎樣才能禁用選擇兩個已被選中?

回答

1

嘗試以下操作:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (tableView.indexPathsForSelectedRows.count == 2 && ![tableView.indexPathsForSelectedRows containsObject:indexPath]) { 
    return nil; 
    } 

    return indexPath; 
} 

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    return ([self tableView:tableView willSelectRowAtIndexPath:indexPath] != nil); 
} 

解釋:

首先是你應該在willSelectRow(BEFORE選擇)而不是didSelectRow(AFTER選擇)中進行檢查。 你檢查是否達到最大...

if (tableView.indexPathsForSelectedRows.count == 2 

,如果達到最大您需要做的另一個檢查,使細胞工作的撤銷選擇:

&& ![tableView.indexPathsForSelectedRows containsObject:indexPath]) 

如果達到最大與當前所選行尚未選擇你根本

return nil; 

你也應該實現shouldHighlighRow方法來處理

被選中,但取消選擇一毫秒你不想以後

行爲。希望我得到你的權利:)

0

您需要在didSelectRowAtIndexPath:方法中構建此邏輯。跟蹤已經選擇的單元的數量,以及它的2是否沒有進一步執行代碼。

2

在didSelectRowAtIndexPath方法:檢查selectedEntries算,如果是2然後使用下面的代碼: -

[self.tableView deselectRowAtIndexPath:indexPath animated:NO]; 
return; 
+0

如果我這樣做,我可以看到它是如何被選中,但沒有選擇一毫秒後...是否有可能「看不到」的選擇呢? – Kathi