OC-故事板

1.故事版 Storyboard

背景
xib无法快速了解多个xib界面之间的呈现顺序
程序中会有大量的initWithNibName代码
为了解决上述问题,才推出故事版,故事版同时也能大大提高工作效率,但是多人合作开发及后期迭代会比较麻烦

启动时,系统自动做了什么?
–1.根据target中配置加载Main.storyboard
–2.自动创建window对象
–3.自动创建故事版中有启动箭头指向的那个场景背后视图控制器实例
–4.将创建好的视图控制器设置为window的rootViewController,然后显示window

术语:
–1.故事板的每一个看的见的界面,叫场景 Scene, 每个场景都可以绑定一个视图控制器的类
–2.故事板中看到的连线,叫过渡 或 跳转 Segue,Segue是一个实例,可以自定义

基本使用
1.如何设置启动界面
–方案一:有箭头时,直接拖拽到目标VC即可
–方案二:有箭头时或没有箭头时,都可以选中场景上的小黄点(VC) -> 第四个检查器(属性) -> 勾选 is Initial View Controller
2.如何完成从一个vc到另一个vc的跳转
–选中源VC中触发跳转的控件 -> 按住contol -> 连线到目标VC ->在弹出的菜单中,选择 push 或 modal(present)
3.如何为界面中的场景绑定控制器?
–选中场景的小黄点 -> 第三个检查 -> 修改Class
跳转
1.通过Segue跳转
–a 明确跳转源头:明确的知道跳转是由于哪个控件的事件触发的;
–实现方式:无需写代码,直接连线
b 不明确跳转源头:场景中无法确定触发跳转的控件具体是谁;
–实现方式:先选中跳转源VC小黄点 -> 按住control -> 到目标控制器上, 选中中间的连线 -> 第四个检查(属性) -> 设置 identifier 属性为这根线起个名字, 为跳转事件代码 调用 控制的 perFormSegueWithIndentifier方法 + identifier 来完成跳转

//创建故事版对象
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"My" bundle:nil];
//获取故事版初始的场景(带箭头的场景)
UIViewController *vc = storyBoard.instantiateInitialViewController;
//通过场景的 Identifier 在故事版中找到该场景,并创建场景绑定的控制器实例
UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"AloneVC"];
[self presentViewController:vc animated:YES completion:nil];
//不明确跳转源头
//通过 “goRedVc” 找到 segue ,然后跳转到 segue 目标控制器
[self performSegueWithIdentifier:@"goRedVc" sender:nil];

2.跳转到故事板独立的一个场景
–step1:先给独立的场景在第三个检查器中起一个名字
–step2:在想要跳转时,利用故事版的instantiateViewControllerWithIdentifier根据名字,创建目标场景实例
–step3:使用 push 或 present 进行跳转即可
3.从故事板中跳转到其它的xib中
–step1:使用initWithNibName方法创建控制器实例
–step2:使用 push 或 present 进行跳转即可
4.从故事板中跳转到其它故事板中
–step1:通过名字把其他故事板实例创建出来
–step2: 获取故事板中带启动箭头的控制器实例
–step3:修改window的rootViewController为控制器实例

//重写父类的方法  通过segue跳转时 会自动调用
//segue 参数 就是跳转时的那条线
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"goBlueVc"]) {
        //把线的目标控制器 获取出来
        MyViewController *myVC = segue.destinationViewController;
        myVC.content = self.textField.text;
        //    myVC.delegate = self;
        myVC.backValueBlock = ^(NSString *content) {
            self.label.text = content;
        };
    }else {
        RedViewController *redVC = segue.destinationViewController;
        redVC.redContent = self.textField.text;
    }
}
//segue 的目标控制器 是 导航控制器,所以我们要用 UINavigationController 接收
UINavigationController *navi = segue.destinationViewController;
//获取导航控制器的 rootViewController
RegisterViewController *registerVC = navi.viewControllers[0];
//设置代理
registerVC.delegate = self;
//创建主界面的故事板对象
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
self.view.window.rootViewController = storyboard.instantiateInitialViewController;
发布了52 篇原创文章 · 获赞 5 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/shuan9999/article/details/52577031