码迷,mamicode.com
首页 > 其他好文 > 详细

Xcode -(OC版)Storyboard教程 1.5:Segues的介绍

时间:2017-11-02 21:19:06      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:选中   转换   bar   代理模式   场景   修改   一个   pat   item   

1 - 现在,让我们创建一个场景使用户可以自己增加新的选手进入列表,在 Player 界面中拖入一个 Bar Button,放置在导航栏的右侧,在属性监视器中将它的 System Item 改为『add』,这样它就会显示一个加号的按钮:当用户点击这个按钮时,它就会弹出一个新的场景让用户对新的内容进行编辑或添加

技术分享

 

2 - 在编辑器中拖入一个新的 Table View Controller,放置在 Players 场景的右边,然后按住 ctrl,拉动加号键到新的场景中,放开鼠标之后,会出现如下选项

技术分享

3 - 选中 Modal,你可以注意到出现了一种新的箭头形式

技术分享

4 - 这样,这个场景就会自动和这个按钮建立联系,从而自动归入 Navigation ,这种链接形式被官方称为 segue(pronounce: seg-way

注: - segue 表面翻译是联线的意思,其实它的意思是转换,这它表示从一种场景转换到另外一种场景中,之前我们使用的连接都是描述一种场景包含另一种场景的。而对于联线来说,它会改变屏幕中显示的内容,而且必须由交互动作触发:如轻点,或其他手势

   - 联线真正了不起的地方在于:你不再需要写任何代码来转入一个新的场景,也不用在将你的按钮和 IBAction 连接到一起,我们刚才做的,直接将按钮和场景链接起来,就能够完成这项工作

5 - 运行这个app,按下 + 键,会发现出现了一个新的列表

 技术分享          技术分享

            点『+』击前                         点『+』击后

说明:这种叫做 『modal』 segue(模态转换),新的场景完全盖住了旧的那个。用户无法再与上一个场景交互,除非先关闭这个场景,过一会我们会讨论 『push』 segue,这种 segue 会把场景推入导航栈

6 - 联线只能够把你送到新的场景,你要是想回来,就得使用 delegate pattern(代理模式)。我们必须首先给这个新的场景设置一个独有的类,新建一个继承 UIViewController,命为 『PlayerDetailsViewController』

7 - 为了把它和 storyboard 相连,回到 MainStoryBoard,选择新建的那个 Table View Contrller,将他的类设置为 PlayerDetailViewController,千万不要忘记这一步,这很重要

8 - 做完这一步之后,把新场景的标题改为『Add Player』,分别加入『Done』和『Cancel』两个导航栏按钮,完成之后应该是这个样子

技术分享

9 - 修改 PlayerDetailsViewController.h 如下

 1 #import <UIKit/UIKit.h>
 2 @class PlayerDetailsViewController;
 3 @protocol PlayerDetailsViewControllerDelegate <NSObject>
 4 - (void)playerDetailsViewControllerDidCancel:(PlayerDetailsViewController *)controller;
 5 - (void)playerDetailsViewControllerDidSave:(PlayerDetailsViewController *)controller;
 6 
 7 @end
 8 
 9 @interface PlayerDetailsViewController : UIViewController
10 
11 @property (nonatomic,weak) id <PlayerDetailsViewControllerDelegate> delegate;// 代理
12 
13 - (IBAction)cancel:(id)sender;// 取消按钮
14 - (IBAction)done:(id)sender;// 确认按钮
15 
16 @end

说明:这会声明一个新的代理机制,当用户点击 Cancel 或者 done 按钮时,我们将用它来交互 Add Player 场景和主场景通讯

10 - 回到故事版编辑器,将 Cancel 和 Done 按钮分别与动作方法连接

技术分享

11 - 在 PlayerDetailsViewController.m,加入如下代码

1 - (IBAction)cancel:(id)sender{
2     [self.delegate playerDetailsViewControllerDidCancel:self];
3 }
4 
5 - (IBAction)done:(id)sender {
6     [self.delegate playerDetailsViewControllerDidSave:self];
7 }

说明:① 这是两个导航栏按钮要使用的方法,现在只需要让代理知道我们刚才加入了代码,而真正关闭场景只是代理的事情

   ② 一般来说一定要为代理制定一个对象参数,这样它才知道向那里发送信息

12 - 现在我们已经为 PlayerDetailsViewController 设置了一个代理协议,我们需要将这个协议的实现方法(implement)写在什么地方,很明显应该写在 PlayerViewController ;因为这个 vc 代表了 Add Player 场景。在PlayersViewController.h 中加入如下代码

1 #import <UIKit/UIKit.h>
2 #import "PlayerDetailsViewController.h"
3 @interface PlayersViewController : UITableViewController<PlayerDetailsViewControllerDelegate>// 接受代理
4 @property(nonatomic,strong)NSMutableArray *players;
5 
6 @end

13 - 在 PlayersViewController.m 的加入代码

 

Xcode -(OC版)Storyboard教程 1.5:Segues的介绍

标签:选中   转换   bar   代理模式   场景   修改   一个   pat   item   

原文地址:http://www.cnblogs.com/self-epoch/p/7774183.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!