• iOS界面传值—属性和通知传值

    发布:51Code 时间: 2016-11-30 17:17

  • iOS传值方式有很多种,这里我们来和大家分享我们常用的四种传值方式。分别为: 1.属性传值 2.通知传值 3.代理传值 4.block传值 下面我们将针对这四种传值方式。来向大家详细介绍。...

  • iOS传值方式有很多种,这里我们来和大家分享我们常用的四种传值方式。分别为:

    1.属性传值

    2.通知传值

    3.代理传值

    4.block传值

    下面我们将针对这四种传值方式。来向大家详细介绍。

    一、属性传值

    属性传值是最简单,也是最常见的一种传值方式,但该传值方式具有一定的局限性:一般只用于将第一个页面的值传递到第二个页面,无法从第二个页面传到第一个页面。

    下面我们通过新建一个项目来学习属性传值。在这里我们在新建一个ViewController命名为SecondViewController。项目要实现的效果是在第一个视图控制器里点击下一页按钮后将视图的文本框的内容传到第二个视图控制器的标签。

                       

    在storyboard,拖入Navigation Controller和两个ViewController。并将这三个视图控制器关联起来。代码实现如下:
           1.在ViewController.m,首先关联文本框属性:

      1 |  @property (weak, nonatomic) IBOutlet UITextField *textField;

    2.在SecondViewController.h文件,关联标签属性,同时声明全部变量contentString,用来表示标签的内容。

      1 |  @property (weak, nonatomic) IBOutlet UILabel *contentLabel;
             2 |  @property (nonatomic, copy) NSString *contentString;

     3.接下来在ViewController.m中实现将文本框的内容传递到SecondViewController的标签的方法。以及手指点击屏幕,收回键盘的方法。

      1 |  -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
             2 |  {
             3 |      SecondViewController *secondVC = segue.destinationViewController;
             4 |      secondVC.contentString = self.textField.text;
             5 |  }
             6 |  -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
             7 |  {
             8 |      [self.textField resignFirstResponder];
             9 |  }

       4.在SecondViewController.m文件的viewDidLoad方法里只需要实现下面一句代码,就完成的属性才传值。

      1 |  self.contentLabel.text = self.contentString;

    二、通知传值
    通知传值,可以跨越多个页面传值, 一般是从后面的页面传给前面的页面。也称为反向传值。这里我们同样是使用两个视图控制器,实现将第二个视图控制器文本框的内容传递给第一个视图控制器的标签。实现的效果如下图所示。

                 

    在实现通知传值之前,我们先来了解两个名词NSNotification和NSNotificationCenter。
    (1)NSNotification
    这个类可以理解为一个消息对象,其中有三个成员变量。
    这个成员变量是这个消息对象的唯一标识,用于辨别消息对象。
    (2)NSNotificationCenter
    这个类是一个通知中心,使用单例设计,每个应用程序都会有一个默认的通知中心。用于调度通知的发送的接受。
    添加一个观察者,可以为它指定一个方法,名字和对象。接受到通知时,执行方法。
    想要详细了解这两个类的属性和方法,可以到官方API上详细了解。
    通知的使用流程:首先,我们在需要接受通知的地方注册观察者,然后,在需要发送通知的地方发送通知消息。代码实现如下:
           1.在ViewController.h文件第一个视图控制器的标签。

      1 |  @property (weak, nonatomic) IBOutlet UILabel *contentLabel;

       2.在ViewController.m文件的viewDidLoad方法中获取通知中心注册观察者。这是一个单例对象,一个应用程序只有一个通知中心。并添加当前类对象为一个观察者。Selector的参数后面表示接受通知后实现的方法name的参数。

      1 |  [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(changeValue:) name:@"byValue" object:nil];

      3.在SecondViewController.h文件关联文本框属性,

      1 |  @property (weak, nonatomic) IBOutlet UITextField *textField;

       4.在SecondViewController.m文件的传值按钮点击事件,发送通知消息。

      1 |  - (IBAction)byValue:(id)sender {
             2 |      NSNotification *notification = [NSNotification notificationWithName:@"byValue" object:self.textField.text userInfo:nil];
             3 |      [[NSNotificationCenter defaultCenter]postNotification:notification];
             4 |      [self.navigationController popViewControllerAnimated:YES];
             5 |  }

       5.在ViewController.m文件的通知中心的定义的changeValue:方法实现接受通知。

      1 |  -(void)changeValue:(NSNotification *)notification
             2 |  {
             3 |      if (notification.object != nil) {
             4 |          self.contentLabel.text = notification.object;
             5 |      }
             6 |  }


  • 上一篇:iOS的内存缓存机制

    下一篇:梳理iOS 创建对象的方法

网站导航
Copyright(C)51Code软件开发网 2003-2015 , 沪ICP备05003035号