【iOS】push和pop、present和dismiss

打印 上一主题 下一主题

主题 985|帖子 985|积分 2957

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
媒介

  push 和 present 是两种用于导航和切换视图控制器(ViewController)的常用方法,push与present都可以推出新的界面,present与dismiss对应,push和pop对应。
present只能逐级返回,push全部视图由视图栈控制,可以返回上一级,也可以返回到根vc或其他vc。
push和pop

push和pop分别用于在导航控制器中添加视图控制器、移除视图控制器。
push

push 方法通常与导航控制器(UINavigationController)一起使用。当我们调用一个视图控制器的pushViewController:animated: 方法时,即会将新的视图控制器“推入”导航堆栈的顶部,且会创建一个向右滑动的动画结果,并且新的视图控制器会成为当前表现的视图控制器。
当我们想要在应用步调中创建一个导航层次布局时,好比在不同的层级之间切换,如从列表到详情。用户可以通过按下导航栏上的返回按钮或手势滑动来返回到先前的视图控制器。
示例代码:
  1. UIViewController *viewController = [[UIViewController alloc] init];
  2. [self.navigationController pushViewController:viewController animated:YES];
复制代码
pop

从导航堆栈中移除当前视图控制器,返回到之前的视图控制器。使用popViewControllerAnimated:方法,实现用户点击返回按钮或手势滑动返回上一个视图控制器功能。
示例代码:
  1. [self.navigationController popViewControllerAnimated:YES];
复制代码
present和dismiss

present和dismiss分别用于出现模态视图控制器和关闭模态视图控制器。
   模态对话框(Modal Dialog)是一种用户界面元素,它用于在应用步调中临时表现一个窗口,要求用户进行交互,同时阻止用户与应用步调的其他部门进行交互,直到对话框关闭。在模态对话框表现期间,用户必须对对话框进行响应,才能返回到应用步调的主界面。
  present

present 方法用于模态地出现一个视图控制器。当你调用一个视图控制器的 presentViewController:animated:completion: 方法时,你正在将新的视图控制器覆盖在当前视图控制器之上。这通常用于表现一个临时的界面,如弹出窗口、警告框或表单。
当你想要表现一个临时的视图控制器,用户需要与之交互,好比登录窗口、设置选项或表单。
当你不需要导航堆栈来管理视图控制器时,好比在游戏或媒体播放器中。
示例代码:
  1. UIViewController *viewController = [[UIViewController alloc] init];
  2. [self presentViewController:viewController animated:YES completion:nil];
复制代码
dismiss

关闭当前模态出现的视图控制器,返回到之前的视图控制器。
使用dismissViewControllerAnimated:completion:方法,实现用户完成模态视图控制器中的操作(如填写表单、查看图片后)并关闭它的功能。
示例代码:
  1. [self dismissViewControllerAnimated:YES completion:nil];
复制代码
实现模态对话框代码示例


  • 创建并出现模态对话框
  1. // 创建一个新的视图控制器实例,这将作为模态对话框
  2. UIViewController *modalViewController = [[UIViewController alloc] init];
  3. // 配置模态对话框视图控制器的属性,如视图背景色、大小等
  4. modalViewController.view.backgroundColor = [UIColor whiteColor];
  5. modalViewController.modalPresentationStyle = UIModalPresentationStyleOverFullScreen; // 设置模态样式
  6. // 呈现模态对话框
  7. [self presentViewController:modalViewController animated:YES completion:nil];
复制代码

  • 关闭模态对话框
  1. // 在模态对话框中添加一个按钮,用于关闭对话框UIButton *closeButton = [UIButton buttonWithType:UIButtonTypeSystem];[closeButton setTitle:@"Close" forState:UIControlStateNormal];[closeButton addTarget:self action:@selector(closeModal) forControlEvents:UIControlEventTouchUpInside];[modalViewController.view addSubview:closeButton];// 实现关闭模态对话框的方法- (void)closeModal {    // 调用 dismiss 来关闭模态对话框    [self dismissViewControllerAnimated:YES completion:nil];
  2. }
复制代码
区别

导航堆栈:push 将视图控制器添加到导航堆栈中,而 present 不会。
返回方式:使用 push 时,用户可以通过物理返回按钮或手势返回到前一个视图控制器。使用 present 时,通常需要实现一个关闭按钮或手势来关闭模态视图控制器。
动画结果:push 通常向右滑动,而 present 的动画结果可以自界说,通常从底部或中间弹出。
使用上下文:push 适用于导航布局,present 适用于模态对话框。
总结

present一样平常用于不同业务界面的切换,push一样平常用于同一业务不同界面之间的切换。
导航控制器(UINavigationController):紧张用于管理视图控制器的堆栈,支持 push 和 pop 操作。
模态出现(Modal Presentation):不涉及导航堆栈,用于临时表现视图控制器,支持 present 和 dismiss 操作。
返回按钮和关闭按钮:在 pop 和 dismiss 操作中,通常有返回按钮或关闭按钮供用户操作。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

祗疼妳一个

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表