兩個控制器版本
-
思路:兩個不同的控制器,放兩個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
一個控制器解決 tableview聯級菜單
- 一個tableview的代理方法實現給兩個控制器做數據源,需要判斷當前表格是哪個表格
BUG和一些小問題
- 加了導航欄的BUG
- 如果在一個控制器里加了兩個tableview,然后在把一個導航控制的根控制器設置成加了兩個tableview的控制器,會出現一個正常顯示另一個錯位,產生的原因:導航控制器會取出第一個控件給這第一個子控件加導航控制器,并且幫我們修改了第一個控件的contentInset屬性(內邊距的top加了64),所以第一個沒問題,第二個控件沒有幫我添加,需要手動修改contentInset屬性的top也加64
- UIScrollView也有這種問題,系統會自動幫我們添加一個
//自動調整ScrollView的Insets
automaticallyAdjustsScrollViewInsets 屬性,這個屬性也會自動幫我們增加64,并且默認是yes。 - 造成這些問題的根本是導航控制器?還是導航欄?
-調整Insets是取決于在不在導航控制器環境下