storyboard进阶教程 搭建完整APP

来源:互联网 发布:刘统勋 知乎 编辑:程序博客网 时间:2024/06/05 22:30

相关例程:http://download.csdn.net/detail/q562679764/9272385
上一次我们讲解了如何使用storyboard,这次说一下如何利用storyboard搭建一个完整的APP
目标结构:
登陆界面:使用navigation跳转到注册界面或用户界面
注册界面:返回登陆界面
用户界面:包含两个界面 A和B AB使用tabbar跳转
界面A:使用navigation跳转到A1和A2
界面B:无操作
界面A1:返回登陆界面
界面A2:无操作
下面是效果图

首先 创建一个storyboard工程
因为登陆界面是使用navigation进行下一级的跳转的 所以我们要把根视图设为navigationController
切换到storyboard界面 使用delete键删除 拖拽一个navigationController 到视窗中,注意 是navigationController图标是黄色的这里写图片描述然后把navigation自带的一个tableViewcontroller删除 只留下一个navigation
这里写图片描述
将is initial View controller选中 左边就会有一个箭头指向navigationController了 添加一个ViewController 到视图上 并将它设置成navigation的rootViewController
这里写图片描述
设置完成后 viewController上面会自动添加一个navigation Item 选中 它 将title设置成登陆 这样就完成登陆界面的创建了
再创建一个viewController 然后选中登陆界面 右键上方的黄色按钮 然后拖拽到新创建的ViewController上面 在弹出的选择框中选择push 然后再添加一个tab Bar Controller ;
tab Bar Controller 自带两个ViewController 选中登陆界面 使用push方式连接到tab Bar Controller 完成后的效果是这样的
这里写图片描述

现在虽然我们已经连线好了 但是还无法跳转,因为我们是通过controller的黄色按钮连接的,这样的连接方式不同于直接在按钮上连接,使用这样的连接方式,只是指定了视图间的跳转方式 至于何时跳转 我们需要在代码中定义
在登陆视图中添加两个button登陆和注册 并将登陆视图和入口类ViewController关联起来 连线button的方法到ViewController
这里写图片描述
接着 为登陆视图的两个segue设置标识符 一个设置成denglu 一个设置成zhuce
这个将作为我们跳转到那个视图的依据
这里写图片描述
切换到viewController的.M文件中 在button的方法中写入跳转代码

- (IBAction)zhuCe:(id)sender {    //通过segue的identifer来进行跳转 第一个参数要填上对应segue的identifier 如果错误将会崩溃    [self performSegueWithIdentifier:@"zhuce" sender:nil];}- (IBAction)dengLu:(id)sender {    [self performSegueWithIdentifier:@"denglu" sender:nil];}

这样就可以实现登陆界面跳转到注册和tabbarController了
由于注册是通过push跳转的自带返回按钮 所以不需要写返回方式了
下面是效果图
这里写图片描述
可以看到 我们只写了登陆界面的跳转 tabbarController的跳转我们并没有写代码 ,系统就自动为我们实现了
严格意义来说 我们只用了两行代码 就基本将这个工程的视图架构完成了,现在我们进行最后的一些步骤,为B增加一个二级视图 并使用navigation方式跳转 还要让B的二级视图能够返回登陆界面
首先 我们选中视图B
这里写图片描述
选择为B视图控制器增加一个navigation 接着 在B中添加一个Button 再拖拽一个新的ViewController 作为B的二级视图 在Itme中添加一个button 右键button 然后拖拽到二级视图上面 选择push 这样不需要写代码 点击按钮就可以直接跳转了 缺点是无法进行跳转前的判断
接着 我们为二级视图设置一个返回登陆界面的button, 将这个button使用modal连线到第一个navigationController .
这样 就完成了 下面是完成样板和效果图
完成后的样子

下面是效果图:
这里写图片描述

关键点:
1.为什么根视图是navigationController?
和使用代码构造相同 如果视图想使用push方式跳转 必须有一个navigationController的实例 这样将main页面设置成navigationController的rootViewController之后 Main就可以使用push方式跳转到注册和登陆界面了,相当于写入了下面的代码

        UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:mainViewController];

2.什么时候直接使用按钮与视图连线 什么时候使用视图与视图连线?
如果不需要在跳转页面之前进行操作,可以直接使用按钮与视图连线,如果需要进行一些操作之后再跳转或者直接取消跳转 则使用视图与视图连线,并设置连线的identifier,在按钮的事件方法中写入跳转方法:

- (IBAction)zhuCe:(id)sender {- //这里可以写入一些跳转前的操作    if (跳转条件){    [self performSegueWithIdentifier:@"identifier" sender:nil];    }}

3.最后从B1跳转到main页面的时候为什么选择modal?
这是测试过的结果,使用其他方式跳转要么携带navigationBar要么携带tabbar,这样就违背了我们返回主界面的要求,看下使用show的效果:
这里写图片描述

4.为什么连线的时候跳转方式选项很少? 如图中1的样子 而不是图2的样子?
这里写图片描述
这是因为关闭了auto layout的选项 打开就可以了
这里写图片描述

PS: 使用storyboard确实方便了很多 但是缺点也很多,一个看似无害的设置可能就会造成想象不到的奇怪效果,对于出现问题后的调试造成很大的阻碍,因为你很难找到问题的关键,尤其是代码写完之后,你不但需要排查代码还要去梳理storyboard中的关系

1 0