2013-03-28 110 views
2

我試圖讓我的UITableViewCell更改它的附件突出顯示。所以突出顯示時附件較暗。除了一個例外,我已經設法使它工作得很好。當一個單元格被按下時,它會導致單元格突出顯示,但是當該按鍵被移動並且突出顯示被取消時,accessoryView會保留突出顯示的圖像。更改UITableViewCell突出顯示的附件

是否有任何方法檢測突出顯示是否被取消,因此我可以將accessoryView更改回它應該是什麼?我需要創建一個UITableViewCell的子類來完成這個任務嗎?任何幫助是極大的讚賞。謝謝!

一般狀態: enter image description here

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
    UIImageView *accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessoryDark.png"]]; 
    cell.accessoryView = accessoryView; 
} 

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
    UIImageView *accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessory.png"]]; 
    cell.accessoryView = accessoryView; 
} 
Normal cell state

亮狀態 enter image description here

按下並移動觸摸(想什麼,我避免)後

回答

8

我試圖重現您的設置,我發現是索引路徑傳遞給didUnhighlightRowAtIndexPath包括一個NSNotFound行。因此,您可能需要檢查您在didUnhighlightRowAtIndexPath中收到的單元格是否爲零。如果事實證明你得到的錯誤indexPaths傳遞給didUnhighlightRowAtIndexPath,那麼我認爲我們可以將它記錄到新API中的一個錯誤中,並且你將要使用didSelectRow和didDeselectRow,或者子類UITableViewCell並監視變化到您的子類中選定和突出顯示的狀態。

你可以嘗試的另一件事情是設置附件以

[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessory"] highlightedImage:[UIImage imageNamed:@"accessoryDark"]]; 

然後(理論上)附屬視圖會自動顯示基於單元的聚焦狀態正確突出或不突出顯示的圖像,而且您不必在代理方法中觀察這些更新。

+0

謝謝!我最終使用'UIImageView'與'突出顯示圖像集'。你對'didUnhighlightRowAtIndexPath'中的indexPath也是正確的,但我最終沒有使用它,因爲UIImageView是更簡單的解決方案。 – bvogelzang

0

嘗試使用didSelectRow...didDeselectRow...。您還應該保留所選單元格的索引路徑。這樣滾動不會混淆你的單元格(當然,在cellForRow...中你會檢查當前單元格是否是所選單元格,並相應地設置附件視圖)。希望這可以幫助!

+0

滾動並不是真的搞砸了這件事。事實上,選中單元格之前取消突出顯示。所以'didSelectRow ...','didUnhighlight ...'和'didDeselectRow ...'甚至都沒有被調用。 – bvogelzang

相關問題