美文网首页
多个UITableView数据传递 、父子控制器

多个UITableView数据传递 、父子控制器

作者: 闲得一B | 来源:发表于2016-04-23 09:35 被阅读238次

多个UITableView数据传递

需求:左右两个UITableView,当点击左边UITableView时,右边的UITableView数据跟随变化
方法一:(两个UITableViewController)
1、使用两个UITableViewController,设置右边为左边的代理,右边监听左边的点击。
2、在左边的UITableViewController自定义一个代理方法,供右边的UITableViewController来实现,
3、通过点击左边的控制器的cell来传递数据。右边的控制器根据传递过来的数据reloadData刷新数据。
方法二:(两个UITableView)
1、使用两个UITableView,设置两个UITableView的数据源都是UIViewController。
2、设置行,组,每个cell的样式时,都判断当前是哪个UITableView。
3、当点击左边表格是,reloadData刷新右边表格的数据。


注意

1、UITableView的数据突然不见了,可能是由于数据源挂了,UITableViewController挂了。
2、防止重复创建使用懒加载。
3、同一个UITableView,多次addSubviews添加到一个控制器中,只会存在一个(只会将他添加到最上面来)
4、多个UITableView同时存在就会出现问题:当设置透明度时,会看到后面的UITableView。[tableview removeFromSuperView]将不需要显示的tableview移除(移除不一定会销毁,销毁需要没有强指针指向)
5、默认情况下,从XIB加载的控制器的view的autoresizingMask属性默认包含有UIViewAutoresizingFlexibleWidth和UIViewAutoresizingFlexibleHeight
解决:autoresizingMask设置为UIViewAutoresizingNone。


多个控制器切换

将这些控制器添加到一个数组中addChildViewController,根据这个控制器在数组中的位置,能直接切换到相应的控制器的view,其实这就是childViewControllers。


点击view,push到下个界面

需求:导航控制器的rooViewController是oneViewController,oneViewController中的oneView有个小的twoView,点击twoView,push到某个界面。
方法:让twoView控制器twoViewController成为oneViewController的子控制器,才能拿到导航控制器。


点击view,push到下个界面

需求:导航控制器的rooViewController是oneViewController,oneViewController中的oneView,点击oneView,modal出来twoView,
twoView上有个threeView,点击threeView就dismiss掉整个twoView。
方法:将threeViewController成为twoViewController的子控制器。


横竖屏
会调用方法(已过期):
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;
正是由于有了childViewControllers,屏幕横竖屏效果才能抵达子控制器。
原则:如果2个控制器的view是父子控制器(即使中间隔一个view),那么这2个控制器也应该是父子控制器。
[a.view addSubView:b.view];
[a addChildViewController:b];
即使中间隔一个view:
[a.view addSubView:otherView];
[otherView addSubView:b.view];
[a addChildViewController:b];
从childViewControllers中移除控制器removeFromParentViewController

总结
获得所有的子控制器
@property(nonatomic,readonly) NSArray *childViewControllers;

添加一个子控制器
//OneViewController成为了self的子控制器
//self成为了OneViewController的父控制器
[self addChildViewController:[[OneViewController alloc] init]];
// 通过addChildViewController添加的控制器都会存在于childViewControllers数组中

获得父控制器
@property(nonatomic,readonly) UIViewController *parentViewController;

将一个控制器从它的父控制器中移除
// 控制器a从它的父控制器中移除
[a removeFromParentViewController];

注意
  当前控制器已经被添加到某个父控制器上时就会调用这个方法
  当前控制器从父控制器中移除也会调用这个方法
     - (void)didMoveToParentViewController:(UIViewController *)parent
>
  如果是手动创建的`容器`用于保存子控制器,但是添加进去后没有`过渡动画`,就需要手动调用
     - (void)didMoveToParentViewController:(UIViewController *)parent,
  但是不管有没有`过渡动画`都会调用
     -(void)willMoveToParentViewController:(UIViewController *)parent)
  这两个方法一般不用。

相关文章

  • 多个UITableView数据传递 、父子控制器

    多个UITableView数据传递 需求:左右两个UITableView,当点击左边UITableView时,右边...

  • ios中监听事件总共有几种方式?

    1.代理 使用代理传递消息是为了在控制器和视图之间解藕,让视图能够被多个控制器复用,例如UITableView但是...

  • 事件传递

    注意:view之间互为父子关系,那么控制器也必须为父子关系,原因:事件传递,view传递到控制器,如果控制器之间不...

  • Vue中组件间传值总结 ------ 2020-05-17

    父子组件间传递数据的方式 1、父组件向子组件传递数据 2、子组件向父组件传递数据 3、父子组件相互传递同一数据的两...

  • 论存取方法的重要性——在多个视图控制器之间传递数据

    论存取方法的重要性——在多个视图控制器之间传递数据 今天在做练习时,遇到一道习题,描述的情况是:导航控制器下控制着...

  • Flutter -- 跨组件传递数据

    方式数据流动方式使用场景优缺点属性传值父到子简单数据传递传值简单,但跨多个父子节点不方便InheritedWidg...

  • VUE组件通信的十种姿势

    父子组件通信 1、父子组件通过prop传递数据 父组件可以将一条数据传递给子组件,这条数据可以是动态的,父组件的数...

  • 控制器之间的顺传值和逆传值

    顺传值 (A控制器->到B控制器,将A控制器中的某些数据传递给B控制器) 上一级控制器传递给下一级控制器,直接能拿...

  • 父子控制器相关

    父子控制器:导航控制器,UITabBarViewController等。 父子控制器的设计原理:a控制器的View...

  • 小控件实现

    - 一个控制器中包含多个子控制器。 - 分析:可以利用父子关系,建立联系。一个控制器可以有一个父控制器,也可以有多...

网友评论

      本文标题:多个UITableView数据传递 、父子控制器

      本文链接:https://www.haomeiwen.com/subject/xabxrttx.html