• iOS中几种传值的方式


    1.ios里面传值的方式很多中现在介绍几种常用的传值方式:

    第一种: 属性传值方式:

     首先要建两个controller 分别为 RootviewController和 DetailviewController 

    在Detailviewcontrooler.h实现的代码:(暴露出属性)

     #import <UIKit/UIKit.h>

     @interface DetailViewController : UIViewController

    @property (nonatomic,copy)NSString *textString;//属性传值

    @end

    在Detailviewcontroller.m里面的实现代码:

    @interface DetailViewController ()

     @end

    @implementation DetailViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        //添加一个返回按钮

        UIButton *backBtn = [[UIButton alloc]initWithFrame:CGRectMake(15,30 , 60, 30)];

        [backBtn addTarget:self action:@selector(BACK) forControlEvents:UIControlEventTouchUpInside];

        [backBtn setTitle:@"返回" forState:UIControlStateNormal];

        [self.view addSubview:backBtn];

        //创建一个label,来接收传过来的数值

        UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(100, 200, 100, 30)];

        label.textColor = [UIColor redColor];

        label.backgroundColor = [UIColor grayColor];

        label.textAlignment = NSTextAlignmentCenter;//对齐的方式

        label.numberOfLines = 0; //不分行数

        label.text = self.textString;//传值过来

        [self.view addSubview:label]; 

    }

    -(void)BACK {

         [self dismissViewControllerAnimated:NO completion:nil];

     }

    在Rootviewcontroller.m 的实现代码:

    #import "RootViewController.h"

    #import "DetailViewController.h"

    @interface RootViewController ()

    @property (nonatomic,retain)UITextField *textfield;

    @end

    @implementation RootViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view.

        self.textfield = [[UITextField alloc]initWithFrame:CGRectMake(100, 30, 100, 30)];

        self.textfield.backgroundColor = [UIColor grayColor];

        self.textfield.layer.cornerRadius = 10.0;

        [self.view addSubview:self.textfield];

        //创建一个button传递事件

        UIButton *custombutton = [[UIButton alloc]init];

        custombutton.frame = CGRectMake(110, 100,80, 40);

        [custombutton setTitle:@"入栈显示" forState:UIControlStateNormal ];

        [custombutton addTarget:self action:@selector(handTap:) forControlEvents:UIControlEventTouchUpInside];

        custombutton.backgroundColor = [UIColor redColor];

        custombutton.layer.cornerRadius = 10.0;

        [self.view addSubview:custombutton];  

    }

    -(void)handTap:(UIButton *)sender{

        DetailViewController *detailVC = [[DetailViewController alloc]init];

        detailVC.textString = self.textfield.text;//后面的赋值给前面的

        [self presentViewController:detailVC animated:NO completion:nil];

    }

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

      }

    //点击空白处隐藏键盘

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

        [super touchesBegan:touches withEvent:event];

        [self.view endEditing:YES]; //结束编辑

    }

    最后自己测试一下就可以成功了!!

    第二种:通知(NOtification)传值: 直接上代码:<后面往前面传值的方法>

    在.RootviewController.m的代码:

    //     是后面往前面传值 b == >   a

     #import "RootViewController3.h"

    #import "DetailViewController3.h"

    @interface RootViewController3 ()

    @property(nonatomic,strong)UILabel *label;

    @end

     @implementation RootViewController3

     - (void)viewDidLoad {

        [super viewDidLoad];

         //注册一个通知

        [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(callBack:) name:@"test" object:nil];

        

        //创建一个button传递事件

        UIButton *custombutton = [[UIButton alloc]init];

        custombutton.frame = CGRectMake(110, 100,80, 40);

        [custombutton setTitle:@"rootVC" forState:UIControlStateNormal ];

        [custombutton addTarget:self action:@selector(method) forControlEvents:UIControlEventTouchUpInside];

        custombutton.backgroundColor = [UIColor redColor];

        custombutton.layer.cornerRadius = 10.0;

        [self.view addSubview:custombutton];

        //创建一个label,来接收传过来的数值

        self.label = [[UILabel alloc]initWithFrame:CGRectMake(100, 200, 100, 30)];

        self.label.textColor = [UIColor redColor];

        self.label.backgroundColor = [UIColor grayColor];

        self.label.textAlignment = NSTextAlignmentCenter;//对齐的方式

        self.label.numberOfLines = 0; //不分行数

        [self.view addSubview:self.label];

     }

    -(void)method{

         DetailViewController3 *detailVC = [[DetailViewController3 alloc]init];

        [self presentViewController:detailVC animated:YES completion:nil];

     }

     -(void)callBack:(NSNotification  *)noti{

        NSLog(@"call bcak  is notification");

        self.label.text = noti.object;

        [self dismissViewControllerAnimated:YES completion:nil];

     }

     在DetailViewController.m 的代码:

    #import "DetailViewController3.h"

    @interface DetailViewController3 ()

    @property (nonatomic,strong) UITextField *textfield;

    @end

    @implementation DetailViewController3

     - (void)viewDidLoad {

        [super viewDidLoad];

        //创建一个button传递事件

        UIButton *custombutton = [[UIButton alloc]init];

        custombutton.frame = CGRectMake(110, 100,80, 40);

        [custombutton setTitle:@"DetailVC" forState:UIControlStateNormal ];

        [custombutton addTarget:self action:@selector(handTap:) forControlEvents:UIControlEventTouchUpInside];

        custombutton.backgroundColor = [UIColor redColor];

        custombutton.layer.cornerRadius = 10.0;

        [self.view addSubview:custombutton];

       //创建一个label,来接收传过来的数值

        self.textfield = [[UITextField alloc]initWithFrame:CGRectMake(100, 30, 100, 30)];

        self.textfield.backgroundColor = [UIColor grayColor];

        self.textfield.layer.cornerRadius = 10.0;

        [self.view addSubview:self.textfield];

     }

    -(void)handTap:(UIButton *)sender

    {

       //发送一个通知

       [[NSNotificationCenter defaultCenter]postNotificationName:@"test" object:self.textfield.text];

    }

     - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

    @end

    测试一下就可以成功了!!

    第三种:单例模式传值

    首先创建一个单列对象:sington类

    在sington.h的代码:

    #import <Foundation/Foundation.h>

    @interface Singtoln : NSObject

    @property (nonatomic,strong)NSString *singletonValue;

    +(instancetype)shareSingleton ;

     @end

    在sington.m的代码:

    #import "Singtoln.h"

    static Singtoln *singtolnManager = nil;

    @implementation Singtoln

    +(instancetype)shareSingleton{

         @synchronized(self){

          if (singtolnManager == nil) {

                singtolnManager = [[Singtoln alloc]init];

         }

     }

      return singtolnManager;

    }

    @end

    在RootviewController.m的代码:

    #import "RootViewController4.h"

    #import "DetailViewController4.h"

    #import "Singtoln.h"

    @interface RootViewController4 ()

    @property (nonatomic,strong)UITextField *textField;

    @end

     @implementation RootViewController4

     - (void)viewDidLoad {

        [super viewDidLoad];

         //创建一个button传递事件

        UIButton *custombutton = [[UIButton alloc]init];

        custombutton.frame = CGRectMake(110, 100,80, 40);

        [custombutton setTitle:@"单例传值" forState:UIControlStateNormal ];

        [custombutton addTarget:self action:@selector(method) forControlEvents:UIControlEventTouchUpInside];

        custombutton.backgroundColor = [UIColor redColor];

        custombutton.layer.cornerRadius = 10.0;

        [self.view addSubview:custombutton];

        

        self.textField = [[UITextField alloc]init];

        self.textField.frame = CGRectMake(100, 150,100,40);

        self.textField.backgroundColor = [UIColor grayColor];

        self.textField.layer.cornerRadius = 5;

        [self.view addSubview:self.textField];

    }

    -(void)method{

         Singtoln *singtoln = [Singtoln shareSingleton];

        singtoln.singletonValue  = self.textField.text;

         DetailViewController4 *detail4VC = [[DetailViewController4 alloc]init];

        [self presentViewController: detail4VC animated:YES completion:nil];  

    }

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

    在DetailViewController.m的代码:

    #import "DetailViewController4.h"

    #import "Singtoln.h"

    @interface DetailViewController4 ()

    @property (nonatomic,strong)UITextField *textfield;

    @end

     @implementation DetailViewController4

     - (void)viewDidLoad {

        [super viewDidLoad];

      

        self.textfield = [[UITextField alloc]init];

        self.textfield.backgroundColor = [UIColor grayColor];

        self.textfield.frame = CGRectMake(100, 60, 100, 40);

        self.textfield.textAlignment = NSTextAlignmentCenter;

        self.textfield.layer.cornerRadius = 10;

        [self.view addSubview:self.textfield];

        

        self.textfield.text =  [Singtoln shareSingleton].singletonValue;

    }

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

    @end

    第四种:代理传值:(后面往前面传值) 

    在rootviewcontroller.h的代码:

    #import "RootViewController2.h"

    #import "DetailViewController2.h"

    @interface RootViewController2 ()<PassingDelegate>

    @property (nonatomic,strong)UILabel *label;

    @end

     @implementation RootViewController2

     - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view.

        UIButton *customBtn = [[UIButton alloc]init];

        customBtn.frame = CGRectMake(130, 50,80, 40);

        customBtn.backgroundColor = [UIColor redColor];

        [customBtn setTitle:@"代理传值" forState:UIControlStateNormal];

        customBtn.tintColor = [UIColor blackColor];

        [customBtn addTarget:self action:@selector(handTap:) forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:customBtn];

        

        //创建一个label接受的传过来的值

         self.label = [[UILabel alloc]init];

        self.label.frame = CGRectMake(100, 100, 150, 30);

        self.label.layer.cornerRadius = 10;

        self.label.backgroundColor = [UIColor grayColor];

        self.label.tintColor = [UIColor redColor];

        [self.view addSubview:self.label];

        

    }

     -(void)handTap:(UIButton *)sender{

        DetailViewController2 *detail2VC = [[DetailViewController2 alloc]init];

        detail2VC.delegate = self;

        [self presentViewController:detail2VC animated:NO completion:nil];

    }

     -(void)changeTitle:(NSString *)str{

        self.label.text = str;

        NSLog(@"%@",str);

    }

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

     在DetailviewController.m的代码:

    #import "RootViewController2.h"

    #import "DetailViewController2.h"

    @interface RootViewController2 ()<PassingDelegate>

    @property (nonatomic,strong)UILabel *label;

    @end

    @implementation RootViewController2

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view.

        UIButton *customBtn = [[UIButton alloc]init];

        customBtn.frame = CGRectMake(130, 50,80, 40);

        customBtn.backgroundColor = [UIColor redColor];

        [customBtn setTitle:@"代理传值" forState:UIControlStateNormal];

        customBtn.tintColor = [UIColor blackColor];

        [customBtn addTarget:self action:@selector(handTap:) forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:customBtn];

        

        //创建一个label接受的传过来的值

         self.label = [[UILabel alloc]init];

        self.label.frame = CGRectMake(100, 100, 150, 30);

        self.label.layer.cornerRadius = 10;

        self.label.backgroundColor = [UIColor grayColor];

        self.label.tintColor = [UIColor redColor];

        [self.view addSubview:self.label];

        

    }

    -(void)handTap:(UIButton *)sender{

        DetailViewController2 *detail2VC = [[DetailViewController2 alloc]init];

        detail2VC.delegate = self;

        [self presentViewController:detail2VC animated:NO completion:nil];

    }

    -(void)changeTitle:(NSString *)str{

      

        self.label.text = str;

        NSLog(@"%@",str);

    }

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

  • 相关阅读:
    HTML 块标签的学习(样式/节)
    HTML 链接标签的学习
    HTML 列表标签的学习
    (译)快速指南:用UIViewPropertyAnimator做动画
    RunLoop 总结:RunLoop的应用场景(二)
    RunLoop 总结:RunLoop的应用场景(一)
    Android Studio精彩案例(二)《仿微信动态点击底部tab切换Fragment》
    Android Studio精彩案例(一)《ActionBar和 ViewPager版仿网易新闻客户端》
    Android简易实战教程--第四十五话《几种对话框》
    Android中Sqlite数据库进行增删改查
  • 原文地址:https://www.cnblogs.com/zhufeng1994/p/4624443.html
Copyright © 2020-2023  润新知