iOS二級聯動菜單

兩個控制器版本

  • 思路:兩個不同的控制器,放兩個tableview然后其中一個加載子標題,需要加載子標題的的控制器,監聽被點擊的那個控制器。可以用代理來解決監聽事件,當tableview的某一個cell被點擊的時候把這個被點擊的cell的是哪一行傳出去。

  • 復習代理

    • 代理書寫格式
    • @protocol 代理名字(當前類的名字 + Delegate) <NSObject>
      @optionl (寫代理方法,代理要做什么事情?點擊category控制器把XCCategoryItem.subCategory數組傳出去)
      @end
    • 代理生成為屬性 需要遵守代理的協議,不然不可以實現代理的方法,注意代理用 ARC 下 week MAC 用 assign (用strong會一直持有對象不會釋放)
    • 驗證成為代理的方法有沒有實現代理的方法
    if([self.delegate respondsToSelector:代理方法]){
        代理需要傳出的值是什么
    }
    
  • 需要加載子控制器的tableview實現代理方法,把傳過來的子標題,加到一個數組中去,tableviewcell.textLabel的值就從這個數組中取,在實現完代理方法之后,需要刷新一下表格。

  • 用這個方法主要是為了復習代理方法和 addchildViewController

demo

一個控制器解決 tableview聯級菜單

  • 一個tableview的代理方法實現給兩個控制器做數據源,需要判斷當前表格是哪個表格

BUG和一些小問題

  • 加了導航欄的BUG
    • 如果在一個控制器里加了兩個tableview,然后在把一個導航控制的根控制器設置成加了兩個tableview的控制器,會出現一個正常顯示另一個錯位,產生的原因:導航控制器會取出第一個控件給這第一個子控件加導航控制器,并且幫我們修改了第一個控件的contentInset屬性(內邊距的top加了64),所以第一個沒問題,第二個控件沒有幫我添加,需要手動修改contentInset屬性的top也加64
  • UIScrollView也有這種問題,系統會自動幫我們添加一個
    //自動調整ScrollView的Insets
    automaticallyAdjustsScrollViewInsets 屬性,這個屬性也會自動幫我們增加64,并且默認是yes。
  • 造成這些問題的根本是導航控制器?還是導航欄?
    -調整Insets是取決于在不在導航控制器環境下
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,229評論 4 61
  • UIWindow 初始化: self.window= [[UIWindowalloc]initWithFrame:...
    Sunny_Fight閱讀 1,051評論 0 1
  • 概述在iOS開發中UITableView可以說是使用最廣泛的控件,我們平時使用的軟件中到處都可以看到它的影子,類似...
    liudhkk閱讀 9,089評論 3 38
  • 說明 現實生活中有很多場景需要用到“自然排序”的算法,比如對金錢表示的排序:“¥165.2,¥-365.03,¥+...
    Uncle陽閱讀 1,104評論 0 2
  • 臨江仙?憶征途 夢洛軒 鐵血初燃凝壯志,今朝又憶孤城。 將軍百戰醉秋風。 誰知...
    夢洛軒閱讀 310評論 0 0