测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可 | MIT |
发布上次发布 | 2015年1月 |
由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
仍在积极开发中,并且一些功能尚未完成(但很快就会完成)。未来计划大概如下:
navigationItem
的不常用属性提供更完整的支持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中声明关系过渡。
此项目包含一个自定义过渡(MTStackableNavigationPushSegue
),它执行类似于UINavigationController
的push过渡。使用此自定义过渡,您可以在使用MTStackableNavigationController
的同时实现大多数Storyboard的导航好处。下面是如何实现的
创建您的Storyboard,使Storyboard的初始视图控制器成为您的顶级包含视图(而不是通常的做法是您的初始视图控制器是实例化的容器UINavigationController
)。
从应用的Info.plist
文件中删除任何Main Storyboard
条目。我们将在我们的代理中创建您的UIWindow
和初始视图控制器。
在您的应用代理中创建一个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;
}
在您的Storyboard中,使用基于MTStackableNavigationPushSegue
的自定义过渡在场景之间导航。
欢迎贡献!Fork此仓库并提交pull请求(或只需打开一个工单,我会看看我能做什么)。