2009-07-13 31 views
0

我已經從代碼設置了自定義的UITableViewCell。在我的單元格中,我有一個「UITableViewCellAccessoryDisclosureIndicator」。突出顯示該單元格時,該單元格變爲藍色,並且該配件項目變爲白色。所以這很好。cell.accessoryType消失問題

但是,當點擊並按下新視圖時,配件項目會消失。當我回到tableview時,UITableViewCellAccessoryDisclosureIndicator消失了,在同一個單元格上點擊/按住手指將不會再次突出顯示它。

它上週工作正常,但我根本無法弄清楚是什麼促使這個問題突然發生。我做'hg diff'時看不到任何東西,所以希望有人能指導我找到可能的解決方案。如果您需要特定的代碼,請告訴我。

我已經使用了atebits快速滾動示例代碼,並使用它進行了大量的自定義,但基本(並突出顯示BOOL)保持不變。

PS。在我的代碼中,我也注意到,當推送新視圖時,UITableViewCell不會保持突出顯示。我注意到Apple自己的示例代碼,當新視圖被按下時,單元格會突出顯示,並返回到tableview,單元格保持高亮顯示狀態,直到tableview被一直推回原處。這裏的任何想法?謝謝。

回答

0

我不確定你指的是什麼快速滾動代碼,但是表格視圖單元應該通過視圖控制器的推動和彈出保持突出顯示,只有在彈出下一個控制器後纔會立即取消選擇。換言之,事件的順序應爲:

  1. 桌子上的視圖小區接收觸摸事件
  2. 小區選擇(亮點藍色)
  3. 推送新的控制器
  4. 任何行動(S)新控制器上
  5. 彈出新的控制器
  6. 細胞取消選擇(衰落從藍色到白色)

如果沒有爲您發生這種情況,您可能正在調用UITableView方法deselectRowAtIndexPath:animated: - 這是負責以編程方式取消選擇表視圖中的單元格的方法。確保你的代碼中沒有任何額外的調用。

至於丟失指示器,請確保您的表視圖的數據源在視圖控制器的推送或彈出過程中不會更改。如果數據源更改爲另一個在其生成的單元格中不包含UITableViewCellAccessoryDisclosureIndicator的對象,則即使在突出顯示該單元格時,通過按/彈出視圖來刷新表格也不會看到它。 (這可能是診斷有益顯示錶,等待一小會兒,然後調用[tableView reloadData],看看你的附件指示消失。)

+0

我加入: - (無效)viewWillAppear中:(BOOL)動畫{ NSIndexPath * selectedRowIndexPath = [self.tableView indexPathForSelectedRow]; if(selectedRowIndexPath!= nil){self.tableView deselectRowAtIndexPath:selectedRowIndexPath animated:YES]; } } 現在DisclosureIndicator有些不錯。當單元格被取消選擇或推送tableview時,它會返回。 但是,該行在新視圖被推送時仍被取消選擇。我想得到「訪問過哪個單元格」的效果,所以單元格保持突出顯示。另外,當視圖被推入時,動畫仍然會在信息披露項目中消失:( – runmad 2009-07-13 16:15:21

+0

我不確定您是否真的要將調用添加到deselectRowAtIndexPath:animated :,而是想要移除它們 - 您是否已經在任何位置調用此方法?如果沒有,我們是否可以從您的應用程序中看到一些相關的代碼(如您的tableView實現:didSelectRowAtIndexPath:和其他導航相關的代理方法)? – Tim 2009-07-14 04:25:23

1

我只是解決了這個問題我自己(這AM)

嘗試,爲爲了爭論,從您的單元格中移除LayoutSubviews方法。我發現這會對配件視圖造成嚴重破壞。我最終從我的單元格中移除了該方法,並將這些元素放置在初始化方法中。

0

如果重寫 「layoutSubviews」 你需要你的自定義佈局的東西之前調用

[super layoutSubviews];