iOS二级联动菜单

两个控制器版本

  • 思路:两个不同的控制器,放两个tableview然后其中一个加载子标题,需要加载子标题的的控制器,监听被点击的那个控制器。可以用代理来解决监听事件,当tableview的某一个cell被点击的时候把这个被点击的cell的是哪一行传出去。

  • 复习代理

    • 代理书写格式
    • @protocol 代理名字(当前类的名字 + Delegate)
      @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二级联动菜单)