MTMultipleViewController 1.0.2

MTMultipleViewController 1.0.2

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

Mat Trudel 维护。



  • 作者
  • Mat Trudel

MTMultipleViewController 是一个容器视图控制器,它允许根据导航栏中的 UISegmentedControl 选择子视图。

它做了些很酷的事情

  • 导航栏的所有属性(如 leftBarButtonItemrightBarButtonItem 等)都来自当前选定的子 UIViewController
  • 分段控制的标题取自子视图控制器的 navigationItem.title 属性
  • 您的子视图控制器不需要进行任何修改即可与此容器一起使用
  • 因为 MTMultipleViewController 使用了适当的容器视图控制器 API,所以所有相关的旋转、内存和视图生命周期消息都会自动传递给选定的子视图

应该指出的是,通常情况下,HIGs 指定视图(例如,MTMultipleViewController 显示的)标题中的分段控件是为了在单一数据集中选择不同的筛选视图(例如,请参阅 Phone.app 中的“最近”标签,或官方 Twitter.app 中的“连接”标签)。这些筛选视图很容易通过单个 UITableViewController 子类来完成,如果您使用 MTMultipleViewController 来实现这种设计,那么您可能做错了。在光谱的另一端,使用 MTMultipleViewController 在两个或多个明显不同的视图控制器之间切换同样不是一个好主意;MTMultipleViewController 之所能发挥的地方在于这两个极端之间的灰色区域。在 MTMultipleViewController 内嵌入的视图所呈现的数据之间应该有一种自然且互补的关系;每个子视图中的数据应该彼此主题相似,以便用户理解,但又足够不同,需要单独的视图控制器。如果这描述了您的用例,那么 MTMultipleViewController 可能正是您需要的。

支持的平台

iOS 5.0 是最低版本;自那时以来的任何版本都受支持。需要 ARC(如果您需要这个项目不使用 ARC,请告诉我,我会为您修复;我只是还没有需要过)。

使用

使用 MTMultipleViewController 很简单。初始化看起来与任何系统视图控制器非常相似


UIViewController *controllerOne = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
controllerOne.navigationItem.title = @"One";
controllerOne.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil];;

UIViewController *controllerTwo = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
controllerTwo.navigationItem.title = @"Two";
controllerTwo.navigationItem.prompt = @"Controller two's prompt";

MTMultipleViewController *multipleViewController = [[MTMultipleViewController alloc] initWithChildViewControllers:@[controllerOne, controllerTwo]];
/* add multipleViewController into your view controller hierarchy anywhere you'd like */

前面的代码会得到这样的一些东西

Controller One Controller Two

您可以有任意数量的子视图控制器,但我强烈建议不要超过三个(如果有左右栏按钮项,则为两个)。子视图控制器之间的转换不是动画的(除非是具有 prompt 的视图控制器),这听起来很弱,但实际上这正是您想要的。

请注意,上面添加的 UIBarButtonItemprompt 仅属虚构,真实代码中绝对不会这样使用。上面仅为演示界面外观。

相关钩子也已经就绪,允许在 nib/storyboard 文件中放置 MTMultipleViewController 实例(尽管您仍然必须以编程方式插入子视图;正如所有非系统视图容器一样)。

贡献

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