[英]How to create a Hierarchical menu in iOS?
在我的應用程序中,我有一個菜單,定義如下。 菜單上的每個項目都是一個具有以下數據屬性的節點:
MenuText :(該項目將出現的文本)
isView :此項目是否為葉級項目
subMenus :如果isView為false,則此屬性下有多個菜單項。
因此,它是可以延伸到任何深度的樹形結構。 菜單中的項目可以定期更改,因此必須保持實現的靈活性。 此數據存儲在plist
文件中,並通過代碼(已實現)讀入NSArray
。
現在,我需要在左側創建一個滑出菜單,該菜單將由該數據層次結構填充。 我已經創建了菜單窗格,並向其中添加了滑動手勢,所有這些都能正常工作。 該菜單必須是可折疊的菜單,在該菜單上單擊一個菜單項可展開其下方的子subViews
。 如果單擊的項目是視圖,則將在屏幕的其余部分加載帶有適當數據的新視圖。
我面臨的問題是從NSArray
數據填充菜單(這是UITableView
)的邏輯。 以下是我想到的兩種方法。
創建一個UITableView
,其中的節與菜單頂層的項數一樣多。 然后遞歸遍歷菜單項。 對於不是視圖的每個菜單項(即,它具有subMenus
),請創建一個新節,其行數等於其下的subMenus
數。 當我遇到一個菜單項,即一個視圖且沒有其他subMenus
,請將其作為一行添加到為該菜單項上一級菜單創建的子節中。
創建一個菜單,其中一個部分的行數與頂層菜單項的數目相同。 單擊菜單項時,在其下插入行以表示其子菜單。 單擊同一級別上的另一個菜單項時,通過刪除插入的行來折疊以前擴展的菜單。 單擊沒有子菜單的菜單項時,屏幕的其余部分將填充數據。
我已經嘗試了兩種方法,但無法超出初始步驟。 對於第一種方法,我知道我需要添加一個UITableView
作為的一部分UITableViewCells
,這是很好的,但我需要做的遞歸。 對於第二種方法,我需要知道單擊的每個項目的indexPath
都可以進入多個級別。
我想在這里提出一些建議,說明我應該采用哪種方法,以及有關如何執行該方法的一些指導。 另外,如果有更好的方法,請提供建議。 謝謝。
我認為,使用UINavigationController是最簡單的方法。 您可以根據需要推送任意數量的UITableViews。 如果不符合您的設計要求,則可以嘗試展開式UITableViews。 開源很少:
看看TLIndexPathTools 。 它有一個“ Tree”擴展名可以做到這一點。 嘗試運行Outline示例項目 。 適應示例項目的主要任務是編寫一個遞歸函數,以將節點數組轉換為TLIndexPathTreeItem
對象數組。 controller:willChangeNode:
方法中的所有代碼都是延遲加載的示例,聽起來好像不需要任何這些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.