Push和Modal的区别

Push和Modal的区别

标签(空格分隔): 知识补充


  • 切换控制器的两种方法:push,modal

Push(代码方式,storyboa方式)

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; 
// Uses a horizontal slide transition. Has no effect if the view controller is already in the stack.

- (UIViewController *)popViewControllerAnimated:(BOOL)animated; 
// Returns the popped controller.

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated; 
// Pops view controllers until the one specified is on top. Returns the popped controllers.

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated; 
// Pops until there's only a single view controller left on the stack. Returns the popped controllers.
  • push方法切换控制器是通过导航控制器来实现,导航控制器的作用相当于是要切换的几个控制器之间的管理者(导航控制器的栈来管理),跳转后,原来的控制器会被移除导航控制器的栈,但是不会立即销毁,移除栈的控制器会被放入自动释放池,等事件循环结束后如果没有强指针指向它,这时就会被销毁。
    示意图
/*
  The next two methods are replacements for presentModalViewController:animated and dismissModalViewControllerAnimated: The completion handler, if provided, will be invoked after the presented
  controllers viewDidAppear: callback is invoked.
*/
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion NS_AVAILABLE_IOS(5_0);

// 关闭当初Modal出来的控制器
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion NS_AVAILABLE_IOS(5_0);
  • modal方法跳转控制器只是把目标控制器的View加到了现有控制器上,添加后的View依旧需要目标来管理,而且源控制也不会随新Modal来得View而移除销毁。Modal一般适用于两个不相关的控制器切换(Modal的效果是从屏幕底部向上覆盖源控制器的View)

storyboard中通过segue跳转

  • 自动型:点击某个控件(比如按钮)的时候自动跳转到下一个控制器(按住Control键,直接从控件拖线到目标控制器,适用于不需要做任何判断的跳转)

  • 手动型:需要通过写代码手动执行Segue(必须由来源控制器执行Segue),才能完成界面跳转(按住Control键,从来源控制器拖线到目标控制器,适用于需要做一些判断后再跳转的情况,比如登录的时候判断账号密码)

    // 跳转前做的一些准备工作
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender NS_AVAILABLE_IOS(5_0);
    
    // 用来源控制器手动执行此方法
    - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender NS_AVAILABLE_IOS(5_0);
  • 如果segue的style是push
    • 取得sourceViewController所在的UINavigationController
    • 调用UINavigationController的push方法将destinationViewController压入栈中,完成跳转
  • 如果segue的style是modal

    • 调用sourceViewController的presentViewController方法将destinationViewController展示出来
  • Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值