MTStackableNavigationController 0.5.0

MTStackableNavigationController 0.5.0

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布上次发布2015年1月

Mat Trudel维护。



  • 作者:
  • Mat Trudel

MTStackableNavigationController 尝试成为 UINavigationController 的 API 兼容替代品,特别适用于 Facebook / Path 风格的堆叠导航。与其他大多数基于这种范例的视图控制器项目相比,MTStackableNavigationController 专门针对作为 UINavigationController 的直接替代品使用;分层导航和牌组式交互已被其他控制器做得很好,我认为在此方面没有必要重新发明轮子。

MTStackableNavigationController 做了一些很酷的事情

  • 导航栏框架与 UINavigationController 中的工作方式相同。您可以在控制器的 navigationItem 上定义按钮项、标题和其他属性,就像使用传统的 UINavigationController 一样,并且它们将被适当地呈现。
  • 您的子视图控制器无需修改即可与此容器一起使用(除了将 self.navigationController 的引用更改为 self.stackedNavigationController)。API 方法(以及各种视图生命周期消息的调用序列,如 viewWillAppear 等)与 UINavigationController 相同。
  • 视图控制器可以通过配置其 stackableNavigationItem 属性来自定义其呈现的各个方面。
  • 视图可以配置为在推送至顶部后留在左侧(这是在 stackableNavigationItem 上的 'leftPeek' 属性)
  • 控制器可以揭示堆叠中的下一控制器,同时顶部控制器停留在屏幕右侧(这是在 stackableNavigationItem 上的 'rightPeek' 属性)

MTStackableNavigationController 仍在积极开发中,并且一些功能尚未完成(但很快就会完成)。未来计划大概如下:

0.5 版本计划

  • 配置导航栏的支持(包括色调和其他外观提示)
  • 对包含视图控制器中的工具栏的更好的支持
  • navigationItem 的不常用属性提供更完整的支持

0.6 版本计划

  • 支持子视图布局和在旋转中的调整大小(目前,仅支持竖屏)
  • 在旋转时正确调整导航栏和工具栏的大小
  • 提供 iPad 支持(对我而言这是一个低优先级的项目,可能会推迟。无论怎样,市场上已经有很多其他适用于 iPad 开发的视图控制器项目可能更适合)

0.7 版本计划

  • UINavigationController中视图生命周期消息微妙的时间变化同步的综合测试套件

支持的平台

iOS 5.0是最低版本;自那时以来的任何版本都受到支持。需要使用ARC(如果你希望这个项目无需ARC,请告诉我,我会为你修复;我还没有这方面的需求)。请注意,自iOS 5.0以来,UINavigationController在发送哪些生命周期消息(及顺序)上有所变化;《code>MTStackableNavigationController在这方面模仿了iOS 6.1的语义。

用法

使用MTStackableNavigationController很容易。初始化与系统UINavigationController类似(除了在Storyboard或nib中使用不支持之外;请参考下文获取更多信息)。请参阅包含的MTStackableNavigationControllerDemo项目以了解如何在没有Storyboard的情况下使用MTStackableNavigationController的示例。

在Storyboard中使用MTStackableNavigationController

您可以在Storyboard中自由创建MTStackableNavigationController的实例,但有一些限制。最值得注意的是,您需要通过代码配置根视图控制器,因为苹果不允许第三方视图控制器在Storyboard中声明关系过渡。

此项目包含一个自定义过渡(MTStackableNavigationPushSegue),它执行类似于UINavigationController的push过渡。使用此自定义过渡,您可以在使用MTStackableNavigationController的同时实现大多数Storyboard的导航好处。下面是如何实现的

  1. 创建您的Storyboard,使Storyboard的初始视图控制器成为您的顶级包含视图(而不是通常的做法是您的初始视图控制器是实例化的容器UINavigationController)。

  2. 从应用的Info.plist文件中删除任何Main Storyboard条目。我们将在我们的代理中创建您的UIWindow和初始视图控制器。

  3. 在您的应用代理中创建一个MTStackableNavigationController实例,并按照以下方式填充您的Storyboard的初始视图控制器:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
      UIViewController *topLevelController = [[UIStoryboard storyboardWithName:@"YourStoryboardFile" bundle:[NSBundle mainBundle]] instantiateInitialViewController];
    
      MTStackableNavigationController *stackableNavigationController = [[MTStackableNavigationController alloc] initWithRootViewController:topLevelController];
    
      self.window.rootViewController = stackableNavigationController;
      [self.window makeKeyAndVisible];
      return YES;
    }
    
  4. 在您的Storyboard中,使用基于MTStackableNavigationPushSegue的自定义过渡在场景之间导航。

贡献

欢迎贡献!Fork此仓库并提交pull请求(或只需打开一个工单,我会看看我能做什么)。