我有一個UITableView
包含'N'個部分,每個部分中有'N'個行。UITableView複選標記在每個部分的某個特定行中
我的要求是:
當表視圖頁面加載每個部分中的第一行必須檢查標記。用戶然後可以選擇在每個部分中選擇他的選擇,並且該特定部分中的那一行被選中標記。
如何實現此功能?
我有一個UITableView
包含'N'個部分,每個部分中有'N'個行。UITableView複選標記在每個部分的某個特定行中
我的要求是:
當表視圖頁面加載每個部分中的第一行必須檢查標記。用戶然後可以選擇在每個部分中選擇他的選擇,並且該特定部分中的那一行被選中標記。
如何實現此功能?
顯示在表的任何特定行中的信息由表的數據源決定。確保您用於數據的數據結構有某種方式指示給定的行有複選標記。然後,只需執行-tableView:cellForRowAtIndexPath:
,以確定是否應爲所涉及的單元格顯示覆選標記,並相應地調整單元格。
例如,假設數據表示爲一個節數組,並且每個節都是一個字典數組。然後,每一行都有自己的字典。如果一行有複選標記,其字典將有一個checked
條目設置爲YES
;如果不是,則該條目爲NO
。您可以將複選標記顯示爲圖像。然後,你必須:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyTableViewCell *cell = ... // code to get the cell
if (myData[indexPath.section][indexPath.row][@"checked"].boolValue == YES) {
cell.checkedImageView.image = self.checkmarkImage;
}
else {
cell.checkedImageView.image = nil;
}
return cell;
}
把對勾每節的第一行就是讓每一款的數組中的第一項檢查,其他的是不進行初始化數據的問題。
您可以通過執行-tableView:didSelectRowAtIndexPath:
來更改已檢查的單元格,以便掃描給定部分的數組並取消選中任何已檢查的行,然後檢查選定的行。
當然,您不必使用字典數組來表示數據,並且很有可能不會。這很好 - 這裏的關鍵僅僅是您將通過實現表的委託和數據源來實現您之後的功能,以便它們支持複選標記,並且在任何特定情況下存在或不存在複選標記行將由您的表格數據的某些方面決定。
您可以設置單元格的accessoryType到對號:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = ... // code to get the cell
// isCellSelectedAtIndexPath: is your custom method
// which encapsulates cell selection state logic
if ([self isCellSelectedAtIndexPath:indexPath])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
return cell;
}
自定義方法isCellSelectedAtIndexPath實際包含什麼? – user2552714
+1好點。 @ user2552714,該方法可能包含確定單元格是否應具有複選標記的代碼。同樣,您的數據源將需要根據其用於填充表的任何數據做出決定。 – Caleb
我不明白你的第二句話。你能詳細說明嗎? – user2552714
你如何試圖這樣做呢?現在用什麼數據填充你的表格視圖? – Wain
我的tableview將包含不同的過濾器選項,每個部分的過濾條件是不同的。 – user2552714
任何人都可以幫我在這 – user2552714