2010-05-18 41 views
2

我需要從UITableView實現1級大綱視圖。其中有孩子的單元格會有一個'+'符號,如果用戶點擊它,它下面的單元格應該滑下並且當前所選行的子單元格應該出現。單元格的滑動應該是可見的,如果用戶點擊已擴展行的' - '按鈕,則子單元格應該滑回到父級。從UITableView的大綱視圖

我曾嘗試谷歌搜索,但沒有發現任何指針。

我應該如何開始,我應該繼承的UITableView?或者我應該實現自己的視圖子課程並處理所有的東西?

我莫名其妙地覺得它會更容易子類的UITableView,因爲它會處理所有爲我們行選擇,但我無法弄清楚如何做到這一點。

感謝和問候, 拉吉

回答

1

你必須繼承和UITableViewCell的

@interface OutlineCell : UITableViewCell 

然後,在你的表視圖控制器

- (UITableViewCell*) tableView: (UITableView*) tableView cellForRowAtIndexPath: (NSIndexPath*) indexPath { 
    NSString* MyIdentifier = @"MyIdentifier"; 

    OutlineCell* cell = (OutlineCell*) [tableView dequeueReusableCellWithIdentifier: MyIdentifier]; 
    if (cell == nil) { 
     cell = [[OutlineCell alloc] init]; 
    } 

    // Populate cell data 
} 

您可以定義通過IB接口,創建一個空XIB並拖動一個UITableViewCell,並將您的自定義OutlineCell類作爲文件所有者。然後添加按鈕,標籤等。

編輯:如果你想有一個單元格內的內部表,嘗試同樣的方法添加一個子視圖,您定義的UITableViewCell,裏面坐了一個UITableView。

+0

明智的做法,爲什麼我沒有想到它?那麼,我有一個疑問,但是,我如何才能達到要擴展的行下的行的滑動效果呢?任何想法?根據這種方法,我相信,我們必須爲每一行提供行高,所以當錶行被展開時,我們會根據子元素的數量提供新行。假設原始行高爲20,現在它有5個孩子,新的行高將爲100.我猜測表格會隨着新的行高重新出現而沒有滑動效果,如何規避這種情況? – 2010-05-19 04:30:47

+0

嗯,我不知道這是否工作,但當+按鈕被輕敲時,要展開行並顯示子行,您必須獲取單元格的框架並更改UIView動畫中的size.height屬性塊。 這個工作對我來說,當我使用信息面板比崩潰和擴大。也許它也適用於這種情況^^ – emenegro 2010-05-19 07:24:39

+0

注意:這是一個很好的方法,但在重新加載表格數據和動畫過程中,我發現它非常困難。新的tableView可以通過增加其高度嵌入到單元格中,但是當動畫開始時,作爲子視圖添加的tableView會落在單元格後面,原因 - 我不知道!此外,我真的懷疑,如果tableView重新調用主tableView將重新加載內部tableView或不。如果不是,我們可以在第一個tableView的委託-tableView:cellForRowAtIndexPath:時重新加載數據,但是我懷疑重新加載的順序。更好的方法 - 平坦化樹結構。 – 2010-05-24 13:39:25

2

你能不能保持一個字典作爲數據源?字典,持有字典陣列。和內部字典有兩個鍵值對:

  1. isExpanded
  2. 兒童的信息。

通過檢查布爾isExpanded你會得到的行數。你需要定製單元格來添加按鈕。它會對你有用嗎?

。你可以按下你咯單元格內容右側分化的子單元。

+0

好吧,所以如果行被展開,我會在tableView委託中引入更多的numberOfRows。我怎樣才能達到行下的項目的滑動效果,這個效果必須通過這種方法進行擴展?我想,在這裏也出現同樣的問題,當表視圖在行擴展上重新加載時,tableView的重新出現。 – 2010-05-19 05:29:29

+0

好吧,我想滑動的行下面的行必須展開處理自動錶視圖。我將不得不使用你和Espuz的混合解決方案。 Thanx兩個。 。 。 – 2010-05-19 06:50:56