美文网首页
ios常用的三种传值方式

ios常用的三种传值方式

作者: wjam小涛涛 | 来源:发表于2017-09-17 22:03 被阅读310次

iOS中有多种方案可以实现页面之间的传值,例如:属性传值、代理传值、block传值、单例传值...。常用的三种传值方式就是属性传值、代理传值、block传值。一般属性传值是正向传值。代理和block传值方式多用于反向传值。

1.纯代码方式

  • 属性传值

controller1controller2之间实现属性传值。

controller2 .h文件

#import "ViewController.h"
@interface SecondController : ViewController
@property (strong, nonatomic) NSString *labelStr;
@end 

controller1 .m文件

SecondController *controller = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"SecondController"];
controller.labelStr = @"属性传值";//传递给controller2
[self presentViewController:controller animated:YES completion:nil];

这样就利用了属性传值,将controller1中的值传递给了controller2

  • 代理传值

下面利用代理传值的方式,将controller2中的值传递给controller1

controller2 .h文件

#import "ViewController.h"
@protocol SecondControllerDelegate <NSObject>
- (void)delegateValue:(NSString *)delegateValue;
@end
@interface SecondController : ViewController
@property (weak, nonatomic) id<SecondControllerDelegate>delegate;
@end

controller2 .m文件

 [self dismissViewControllerAnimated:YES completion:nil];
 if ([self.delegate respondsToSelector:@selector(delegateValue:)]) {
        [self.delegate delegateValue:@"代理传值"];
    }

controller1 .m文件

#import "ViewController.h"
#import "SecondController.h"
@interface ViewController ()<SecondControllerDelegate>
@property (weak, nonatomic) IBOutlet UILabel *showLabel;
- (IBAction)attributeValueAction:(UIButton *)sender;
@end
@implementation ViewController
- (IBAction)attributeValueAction:(UIButton *)sender {
    SecondController *controller = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"SecondController"];
    controller.labelStr = @"属性传值";
    controller.delegate = self;//代理
    [self presentViewController:controller animated:YES completion:nil];    
}
//实现controller2的代理方法
- (void)delegateValue:(NSString *)delegateValue{
    self.showLabel.text = delegateValue;  
}
@end

controller2中定义了一个代理,并给了代理声明了一个方法。然后我们在controller1中遵循controller2的代理,实现controller2的代理方法。

  • block 传值

controller2controller1方向传值还可以用block传值。
controller2中声明一个block类型。

controller2 .h文件

#import "ViewController.h"
/**
 定义一个block
 */
typedef void (^Block) (NSString *strValue);
@interface SecondController : ViewController
@property (copy, nonatomic) Block valueBlock;
@end

controller2 .m文件

 if (self.valueBlock) {
        self.valueBlock(@"Block传值");//传递参数
    }
[self dismissViewControllerAnimated:YES completion:nil];

controller1 中实现controller2中的block方法,接受传递过来的参数。

controller1 .m文件

 SecondController *controller = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"SecondController"];
controller.valueBlock = ^(NSString *value){
         self.showLabel.text = value;
    };
    [self presentViewController:controller animated:YES completion:nil];

这样我们就实现了controller1controller2两个页面之间的互相传值。

相关文章

  • ios常用的三种传值方式

    iOS中有多种方案可以实现页面之间的传值,例如:属性传值、代理传值、block传值、单例传值...。常用的三种传值...

  • iOS 常用传值方式

    总结 iOS 日常开发中的几种常用传值方式:正向传值代理传值block传值通知传值单例 文章代码:https://...

  • iOS传值的几种常用方式

    iOS常用的传值方式有以下几种: 属性传值、单例传值、代理传值、block传值、通知传值 接下来我就分别讲述一下这...

  • MY_iOS知识点总结

    iOS常用设计模式总结 iOS传值方式总结 有时候,在同一个类里,方法之间传值,我们可以采用runtime动态绑定...

  • Vue中的组件(全)

    Vue常用的三种传值方式有:父传子 用属性传子传父 用事件传非父子传值 第三方量组件(compon...

  • Vue中的组件

    Vue常用的三种传值方式有:父传子 用属性传子传父 用事件传非父子传值 第三方量组件(component):是Vu...

  • Swift-页面跳转+传值

    本文介绍了IOS开发中的几种基础常用的页面跳转方式以及传值的方式。 present + dismiss 场景准备,...

  • 几种iOS界面之间的传值方式

    几种iOS界面之间的传值方式 一.正向传值方式 (BOOL)application:(UIApplication ...

  • Swift 3.0 闭包使用及示例(附带Get、Post请求方法

    在swift中,实现回调传值常用的有三种方式: 闭包 closure 代理 delegate 通知 NSNotif...

  • 03-vue组件传值

    基于现在都是模块化开发,vue开发过程中组件之间传值是必不可少的,常用的vue的组件传值分为三种方式:父传子、子传...

网友评论

      本文标题:ios常用的三种传值方式

      本文链接:https://www.haomeiwen.com/subject/cubmsxtx.html