页面传值----segue传值

题目

页面主要内容基于StoryBoard上。
制作四步注册界面:

  1. 用户名/密码
  2. email / 全名
  3. 界面上要提示用户名
  4. 可返回上一步,应能显示之前填写的资料。
  5. 如果返回过上一步,再进来,之前填写过的资料要有。
  6. 确认填写的信息是否正确。
  7. 显示所有填写过的信息,密码用 * 代替。
  8. 可返回上一步,应能显示之前填写的资料。
  9. 创建成功提示。
  10. 要提到用户名。
  11. 放一个注册下一个用户,要能直接跳到第1步。
  • 如果想加一个主动结束应用的按钮,可调用 exit(0);

StoryBoard创建

  1. 界面概要
    ![storyboard][1]
  1. 细节部分。
    点击确定后,segue以show方法连接到下一个界面。
    ![show-segue][2]
    不需要编辑的TextField的Enabled不需要开启。
    ![disable][3]

3.unwind返回
对应每一个Scene都创建一个ViewController
![目录][4]
在返回的ViewController里面创建对应方法。
在FirstViewController中创建

-(IBAction)unwindSegueToFirstController:(UIStoryboardSegue *)segue{
    
}

在SecondController中创建

-(IBAction)unwindSegueToSecondController:(UIStoryboardSegue *)segue{
    
}

这时候回到StoryBoard中,右键点击按钮,其中就有了unwindSegueToFirstController与unwindSegueToSecondController方法,这时候将方法与Button连接。(SecondController中的返回是返回到FirstController,就将unwindSegueToFirstController方法与SecondController中的返回按钮进行连接)
![Exit][5]

第一阶段结束
注意其实有些不能更改的TextField可以用Label去替代,但是考虑到介绍时外观不够直观,所以用了关闭了Enabled的TextField。

封装

StoryBoard布置好以后,首先将控件与对应的ViewController相关联,并且为了安全性,不暴露给其他的对象,所以放在m文件的接口中。

@interface FirstViewController ()
@property (weak, nonatomic) IBOutlet UITextField *nicknameTextField;
@property (weak, nonatomic) IBOutlet UITextField *passwordTextField;

@end

如果控件都写到m文件中,外部就无法读取,那么怎么传递数据?
我们可以在h文件中创建接受信息的对象。比如需要传递到SecondViewController中的nickname(用户名)。

#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController
@property(nonatomic,copy) NSString *nickname;

@end

但是这时候要仔细想一想,FirstViewContoller到SecondViewController只传递了nickname,那么SecondViewController到ThirdViewController中也是需要password的。反过来当SecondViewController返回时,若FirstViewContoller不存储SecondViewController中的email以及username,那么当FirstViewContoller再一次跳转到SecondViewController时,因为没有存储数据,所以SecondViewController中不能显示之前填写过的资料。
所以在h文件中应该是这样的:

#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController
@property(nonatomic,copy) NSString *nickname;
@property(nonatomic,copy) NSString *email;
@property(nonatomic,copy) NSString *username;
@property(nonatomic,copy) NSString *password;

@end

如果在每个ViewController里面都这么写,会显得很拖沓。这时候我们要把它封装一下。
创建一个BLNMessage类,将属性放在BLNMessage的接口中。

#import <Foundation/Foundation.h>

@interface BLNMessage : NSObject
@property(nonatomic,copy) NSString *nickname;
@property(nonatomic,copy) NSString *email;
@property(nonatomic,copy) NSString *username;
@property(nonatomic,copy) NSString *password;
@end

然后在ViewController创建BLNMessage类的属性。

#import <UIKit/UIKit.h>
#import "BLNMessage.h"
@interface FirstViewController : UIViewController
@property(nonatomic,strong)BLNMessage *message;

@end

封装介绍完毕

传递数据

具体来说,我们主要需要用到这个方法

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

}

该方法在触发Segue跳转的时候会被调用。
以下代码写在FirstViewController中。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if (self.message==nil)
    {
        self.message=[[BLNMessage alloc]init];
    }
    //封装

    self.message.nickname = self.nicknameTextField.text;
    self.message.password=self.passwordTextField.text;

    //判断是否跳转至SecondViewController
    if([segue.destinationViewController isMemberOfClass:[SecondViewController class]])
    {
        
        SecondViewController *sc = (SecondViewController *)segue.destinationViewController;
        //传递信息
        sc.message=self.message ;
    }
}

将数据传递到SecondViewController后,在ViewDidLoad里面取出数据。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.nickNameTextField.text=self.message.nickname;
    self.emailTextField.text=self.message.email;
    self.userNameTextField.text=self.message.username;
}

问题一:为什么要添加这句话?
if (self.message==nil)
{
self.message=[[BLNMessage alloc]init];
}
问题二:还有什么地方没有考虑到?或者是有问题的地方?
传递数据内容讲解内容太多,所以不一一详述。

结尾

该习题重点考查三个方面

  1. unwind用法
  2. 封装
  3. -(void)prepareForSegue:(UIStoryboardSegue )segue sender:(id)sender方法的应用(重要*)
    希望同学们看完之后一定要好好消化。
    [1]: http://static.zybuluo.com/zandhappy/21efbesj2aa6azcg04113203/1.png
    [2]: http://static.zybuluo.com/zandhappy/1ybf382oieje0qqqgnbjeird/3.png
    [3]: http://static.zybuluo.com/zandhappy/4si2l8wk4m7jbpr7bi1qoc2v/2.png
    [4]: http://static.zybuluo.com/zandhappy/s9yuq2x9l6n551fc9g0b98en/4.png
    [5]: http://static.zybuluo.com/zandhappy/12nbugx1r0cyh0motrfko9bo/5.png
    [6]: http://static.zybuluo.com/zandhappy/uyoiyjo20ey1cy69skgxtrgz/6.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容