zoukankan      html  css  js  c++  java
  • ios程序中传值的几种方式

    通常情况下,在进行IOS程序设计时,我们通常需要将一些值进行传递,当Push一个ViewController时,我们一般都会使用属性进行传值,这样就会很容易满足我们的需求,但有些情况下,我们也需要将值从被Push的controller的值传递给上一级controller,这时,该属性就不能满足我们的需求,下面介绍几种传值的方法:

    (一)使用属性传值:这是一种最简单也是最常见的方式,由于该方法是基本方法,就不一一介绍了;

    (二) 使用NSUserdefault来储存值,由于NSUserdefault是一个单例对象,因此他在整个程序运行过程中,都能够保持数据的唯一性,由于这个比较简单,就不举实例了;

    (三)使用协议的方式进行传值,协议是传值的另一种有效且有用的方式:

      通常的做法是:

      (1)首先在需要传值的controller里添加一个协议(注意一定是在.h文件里)

      @protocol tableViewSelectResultDelegate <NSObject>

      - (void)popoverViewSelectedResult:(NSDictionary *)resultDic;

      @end

      (2)在.m文件里我们需要在需要传值的地方调用该协议方法

      if ([self.delegate respondsToSelector:@selector(popoverViewSelectedResult:)]) {

            [self.delegate popoverViewSelectedResult:dic5];

        }

      (3) 在需要接受该值的地方,我们要遵该协议,并实现该协议,对传进来的数值进行相关处理

      - (void)popoverViewSelectedResult:(NSDictionary *)resultDic

      {

        NSLog(@"%@",resultDic);

      }

    (四) 使用block块来进行传值

      在程序进行过程中,使用block块来进行传值是一种比以上方法更加行之有效的方法,也更加简洁方便:其基本原理就是,在哪个controller中调用另外一个对象的block方法或属性,那么该controller就可以获得由该方法或属性所带来的另一个对象的某些值。

      下面是一个示例,用来说明block块在传值时候的特性:

      (1)设置属性

      @property (nonatomic, copy) void (^selectRowAtIndex)(NSInteger index);

      (2)并在值改变的地方进行block传值:

      if (self.selectRowAtIndex) {

            self.selectRowAtIndex(indexPath.row);

        }

      (3)最后在另外的一个controller中调用他的这个属性:

      popview.selectRowAtIndex = ^(NSInteger index){ NSLog(@"select index:%d", index); };

      注意:当在(2)在执行时,会自动调用(3)中的属性,并且整个执行过程中,这个属性只会调用一次,也就是说,如果你在其他地方写了这个属性,那么他可能会调用其他的方法而不会调用(3)中的输出值函数。

        

  • 相关阅读:
    【java】jfairy和java-faker假数据利器
    【Spring boot】【gradle】idea新建spring boot+gradle项目
    【mac】mac上使用brew 安装速度慢/每次使用brew 都会卡在updating homebrew不动/更换homebrew的镜像源
    【gradle】mac上安装gradle
    【mac】mac上安装JDK
    如何解决ajax跨域问题(转)
    java实现点选汉字验证码(自己修改后的)
    AES加解密
    java随机打乱集合顺序
    利用StringEscapeUtils对字符串进行各种转义与反转义(Java)
  • 原文地址:https://www.cnblogs.com/yuanjianguo2012/p/4074236.html
Copyright © 2011-2022 走看看