SetupController
MBSetupController
是一个继承自UIViewController
的控制器,类似于 wizard
或 setup assistant
,可以展示一系列的对话框视图,引导用户完成一系列步骤。
它受到iOS设备首次设置过程中展示的iOS Setup.app应用程序的启发。
特性
- 支持横竖屏输出的iOS8通用应用程序。
- 组件包中预定义了一些页面控制器,如
MBTableViewPageController
、MBProgressPageController
或MBFinishPageController
,它们为快速构建MBSetupController
的页面提供了大量功能。 - 预定义的
MBTableViewPageController
使用块而不是代理调用来保持表格视图的分段代码在同一个位置,支持自动布局和自动调整单元格大小(iOS8特性)。
演示项目
在仓库中包含了演示项目。要运行它,首先克隆仓库,然后从Example目录运行 pod install
需求
最低iOS目标 | 注意 |
---|---|
iOS 8 | - |
安装
SetupController可以通过CocoaPods获取。要安装它,只需将以下行添加到Podfile中
pod "SetupController"
##架构
###Setup 视图控制器
MBSetupController
###页面视图控制器
MBBasePageController
MBTableViewPageController
MBProgressPageController
MBFinishPageController
###为 MBTableViewPageController
创建项和单元格
MBSetupPageItem
MBLabelItem
MBTextFieldItem
MBSetupPageCell
MBLabelCell
MBTextFieldCell
##快速开始
###实现setup控制器的数据源
-
继承
MBSetupController
@interface MBSampleSetupController : MBSetupController <MBSetupControllerDataSource>
-
设置初始视图控制器
- (void)viewDidLoad { [super viewDidLoad]; MBAccountController *initialController = [[MBAccountController alloc] init]; [self setViewControllers:@[initialController] animated:NO]; }
-
实现
MBSetupControllerDataSource
协议- (UIViewController<MBPage> *)setupController:(MBSetupController *)setupController viewControllerAfterViewController:(UIViewController<MBPage> *)viewController { if ([viewController isKindOfClass:[MBAccountController class]]) { MBProgressController *progressController = [[MBProgressController alloc] init]; progressController.labelTitle = @"It may take a while to set up your account..."; return progressController; } return nil; }
###实现页面视图控制器
-
继承
MBTableViewPageController
@interface MBAccountController : MBTableViewPageController
下一步都在
-viewDidLoad
中。 -
创建分区
MBSetupPageSection *section = [MBSetupPageSection sectionWithTitle:@"Configure Account"];
-
配置分区标题
section.headerViewBlock = ^UIView*(MBSetupPageSection *section) { return [weakSelf preparedPageHeaderViewWithTitle:section.title]; }; section.headerHeightBlock = ^CGFloat(UITableView *tableView, MBSetupPageSection *section, UIView *view) { CGSize size = [view sizeThatFits:CGSizeMake(tableView.frame.size.width, 0)]; return size.height; };
-
配置分区页脚
section.footerViewBlock = ^UIView*(MBSetupPageSection *section) { MBSectionFooter *footer = [weakSelf preparedFooterViewWithImage:[UIImage imageNamed:@"SampleImage"] title:@"Sign in with your account credentials" subtitle:@"Your credentials should have been sent to you by administrator. Contact our support team if you have any questions."]; [footer.topButton setTitle:@"Skip This Step" forState:UIControlStateNormal]; [footer.topButton addTarget:weakSelf action:@selector(skip) forControlEvents:UIControlEventTouchUpInside]; return footer; }; section.footerHeightBlock = ^CGFloat(UITableView *tableView, MBSetupPageSection *section, UIView *view) { CGSize size = [view sizeThatFits:CGSizeMake(tableView.frame.size.width, 0)]; return size.height; };
-
创建和配置文本字段项
MBTextFieldItem *hostItem = [[MBTextFieldItem alloc] initWithTitle:@"Host" text:nil placeholder:@"example.com"]; hostItem.keyboardType = UIKeyboardTypeURL; hostItem.autocorrectionType = UITextAutocorrectionTypeNo; hostItem.autocapitalizationType = UITextAutocapitalizationTypeNone; hostItem.textDidChangeBlock = ^(MBTextFieldItem *item) { [weakSelf validate]; }; hostItem.validateBlock = ^BOOL(MBSetupPageItem *item) { return [(MBTextFieldItem *)item text].length > 0; };
-
将项添加到分区
section.items = @[hostItem];
-
将
sections
属性设置为MBTableViewPageController
self.sections = @[section];
###显示Setup控制器
MBSampleSetupController *setupController = [[MBSampleSetupController alloc] init];
setupController.dataSource = setupController;
[self presentViewController:setupController animated:YES completion:nil];
作者
Maksim Bauer, [email protected]
许可证
SetupController在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。