两个控制器版本
-
思路:两个不同的控制器,放两个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是取决于在不在导航控制器环境下