【问题标题】:iOS Multiview AppiOS 多视图应用
【发布时间】:2011-09-11 17:17:04
【问题描述】:

我正在尝试构建一个多视图应用程序,即基于一些手势,显示、删除新视图等。

我找到了 3 种方法 -

  1. [self.view insertSubview:newViewController.view atIndex:3];
  2. 使用UINavigationController
  3. 终于使用modalViewController - [self presentModalViewController:newViewController animated:YES];

首先,在第二种方法中,我可以在没有UINavigationTabBar 的情况下使用这个控制器吗?我有一组自定义的 UIView 对象,我想从 Screen 推送和弹出这些对象。我不希望顶部(或底部)丑陋的 Apple 导航栏。我将根据应该出现的[self.navigationController popViewControllerAnimated] 提供自定义按钮。这可能吗?

另外,这些技术中哪一种最好?在使用&代码维护、内存使用等方面。

【问题讨论】:

    标签: objective-c ios uiview uinavigationcontroller modalviewcontroller


    【解决方案1】:

    在使用和代码维护、内存使用等方面,毫无疑问UINavigationController 是最合适的。它已经针对您正在做的事情进行了优化。而且由于您从中推送和弹出UIViewControllers(不仅仅是UIViews),当前未显示在屏幕上的视图可以自动释放以由操作系统释放内存。

    您可以使用顶部没有栏的导航视图吗?我想也许你应该使用 RTFM。具体来说,-setNavigationBarHidden:animated:

    也就是说,UINavigationController 在做它不打算做的事情时并不是特别灵活。特别是,它对用于在其堆栈上的视图控制器之间进行动画处理的转换持固执己见。

    你可能有一些运气推动和弹出无动画(通过将NO 传递给这些方法的animated: 参数),并设置一个委托来处理-navigationController:willShowViewController:animated:。理论上,您可以在根视图的动画中添加CATransition。但是任何比这更复杂的东西(在屏幕上滑动时跟踪您的手指的视图等),您可能必须编写自己的控制器并管理自己的视图。

    但您仍应阅读 Apple 的 iOS 视图控制器编程指南NSNavigationManager 规范,直到您完全了解它们。很难找到更好的模式来作为设计的基础。

    【讨论】:

      【解决方案2】:

      第二个 UINavigationController。是的,您可以使用自定义导航栏。

      【讨论】:

      • 感谢您对UINavigationController的确认。你能发表一些推理吗?另外,你能告诉我如何在内部使用UINavigationController吗?即切换自定义视图控制器?
      • 补充一点,我根本不想要导航栏。当向用户呈现一个新视图时,我希望提供一个“返回”按钮,该按钮应该执行[self.navigationController popViewControllerAnimated]。这怎么可能?
      • 使用 UINavigationController 可以轻松地在多个视图之间分层导航。您也可以使用您提到的其他选项。但是使用 UINavigationController 是在多个视图之间导航的更合乎逻辑的方式。您可以隐藏 navigationBar - (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated 然后在您的视图中添加一个后退按钮,按钮操作会执行 [self.navigationController popViewControllerAnimated:YES];
      猜你喜欢
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多