簡體   English   中英

如何在iOS中創建分層菜單?

[英]How to create a Hierarchical menu in iOS?

在我的應用程序中,我有一個菜單,定義如下。 菜單上的每個項目都是一個具有以下數據屬性的節點:

MenuText :(該項目將出現的文本)

isView :此項目是否為葉級項目

subMenus :如果isView為false,則此屬性下有多個菜單項。

因此,它是可以延伸到任何深度的樹形結構。 菜單中的項目可以定期更改,因此必須保持實現的靈活性。 此數據存儲在plist文件中,並通過代碼(已實現)讀入NSArray

現在,我需要在左側創建一個滑出菜單,該菜單將由該數據層次結構填充。 我已經創建了菜單窗格,並向其中添加了滑動手勢,所有這些都能正常工作。 該菜單必須是可折疊的菜單,在該菜單上單擊一個菜單項可展開其下方的子subViews 如果單擊的項目是視圖,則將在屏幕的其余部分加載帶有適當數據的新視圖。

我面臨的問題是從NSArray數據填充菜單(這是UITableView )的邏輯。 以下是我想到的兩種方法。

  1. 創建一個UITableView ,其中的節與菜單頂層的項數一樣多。 然后遞歸遍歷菜單項。 對於不是視圖的每個菜單項(即,它具有subMenus ),請創建一個新節,其行數等於其下的subMenus數。 當我遇到一個菜單項,即一個視圖且沒有其他subMenus ,請將其作為一行添加到為該菜單項上一級菜單創建的子節中。

  2. 創建一個菜單,其中一個部分的行數與頂層菜單項的數目相同。 單擊菜單項時,在其下插入行以表示其子菜單。 單擊同一級別上的另一個菜單項時,通過刪除插入的行來折疊以前擴展的菜單。 單擊沒有子菜單的菜單項時,屏幕的其余部分將填充數據。

我已經嘗試了兩種方法,但無法超出初始步驟。 對於第一種方法,我知道我需要添加一個UITableView作為的一部分UITableViewCells ,這是很好的,但我需要做的遞歸。 對於第二種方法,我需要知道單擊的每個項目的indexPath都可以進入多個級別。

我想在這里提出一些建議,說明我應該采用哪種方法,以及有關如何執行該方法的一些指導。 另外,如果有更好的方法,請提供建議。 謝謝。

我認為,使用UINavigationController是最簡單的方法。 您可以根據需要推送任意數量的UITableViews。 如果不符合您的設計要求,則可以嘗試展開式UITableViews。 開源很少:

  1. JKExpandTableView
  2. SDNestedTable
  3. iOS的樹組分

感謝您的答復。 我最終使用以下控件進行了此操作:

iOS手風琴

它很好地達到了我的目的,我將其發布在這里,以便具有相同要求的人可以找到它。

看看TLIndexPathTools 它有一個“ Tree”擴展名可以做到這一點。 嘗試運行Outline示例項目 適應示例項目的主要任務是編寫一個遞歸函數,以將節點數組轉換為TLIndexPathTreeItem對象數組。 controller:willChangeNode:方法中的所有代碼都是延遲加載的示例,聽起來好像不需要任何這些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM