• iOS 五种传值方式


    1.属性传值和代理传值

    #import <UIKit/UIKit.h>
    #import "SecondViewController.h"
    @interface ViewController : UIViewController<UITextFieldDelegate,postValuedelegate>
    
    @property (nonatomic ,strong) UITextField *textfld;
    @property (nonatomic ,strong) UIButton *button;
    @end
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        //设置背景色
        self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"18103807_114944308127_2.jpg"]];
        
        self.textfld = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 100, 50)];
        self.textfld.backgroundColor = [UIColor grayColor];
        self.textfld.textColor = [UIColor blueColor];
        //指定隐藏键盘的代理
        self.textfld.delegate = self;
        [self.view addSubview:self.textfld];
        //设置跳到下一页的按钮
        self.button = [[UIButton alloc] initWithFrame:CGRectMake(120, 160, 80, 40)];
        [self.button setTitle:@"下一页" forState:UIControlStateNormal];
        [self.button addTarget:self action:@selector(nextPage) forControlEvents: UIControlEventTouchUpInside ];
        [self.view addSubview:self.button];
    }
    
    
    //隐藏键盘
    -(BOOL)textFieldShouldReturn:(UITextField *)textField{
        if ([self.textfld isFirstResponder]) {
            [self.textfld resignFirstResponder];
        }
        
        return YES;
    }
    -(void)nextPage
    {
        
        SecondViewController *second = [[SecondViewController alloc] init];
        //把本页的值赋给下一页的属性,实现传值
        second.str = self.textfld.text;
        [self presentViewController:second animated:YES completion:^{
            NSLog(@"跳转成功");
        }];
        second.delegate = self;
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    //实现代理方法
    -(void)postValue:(NSString *)info{
        self.textfld.text = info;
        
    }
    
    @end
    //第二页代码
    #import <UIKit/UIKit.h>
    //申明一个传值协议
    @protocol postValuedelegate <NSObject>
    //传值协议的方法
    -(void)postValue:(NSString *) info;
    
    @end
    
    
    @interface SecondViewController : UIViewController<UITextFieldDelegate>
    @property (nonatomic ,strong) NSString *str;
    @property (nonatomic ,strong)  UITextField *textFil;
    @property (nonatomic ,assign) id<postValuedelegate> delegate;
    
    @end
    #import "SecondViewController.h"
    
    @interface SecondViewController ()
    
    @end
    
    @implementation SecondViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"5622630220130817130527093.jpg"]];
        self.textFil = [[UITextField alloc ] initWithFrame:CGRectMake(100, 100, 100, 50)];
        self.textFil.backgroundColor = [UIColor grayColor];
        self.textFil.textColor = [UIColor greenColor];
        //属性传值
        self.textFil.text = self.str;
        self.textFil.delegate = self;
        [self.view addSubview:self.textFil];
        
    }
    
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    -(BOOL)textFieldShouldReturn:(UITextField *)textField{
        if (self.delegate) {
            [self.delegate postValue:self.textFil.text];
        }
        if ([self.textFil isFirstResponder]) {
            [self.textFil resignFirstResponder];
        }
        [self dismissViewControllerAnimated:YES completion:nil];
        
        return YES;
    }
    
    
    @end

    2.代码块传值

    #import <UIKit/UIKit.h>
    #import "SecondViewController.h"
    @interface ViewController : UIViewController<UITextFieldDelegate>
    @property (nonatomic ,strong) UITextField *textName;
    @property (nonatomic ,strong) UIButton *button;
    
    @end
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"5622630220130817130527093.jpg"]];
        self.textName = [[UITextField alloc ] initWithFrame:CGRectMake(100, 100, 100, 50)];
        self.textName.backgroundColor = [UIColor grayColor];
        self.textName.textColor = [UIColor greenColor];
        self.textName.delegate = self;
        [self.view addSubview:self.textName];
        self.button = [[UIButton alloc] initWithFrame:CGRectMake(120, 160, 80, 40)];
        [self.button setTitle:@"下一页" forState:UIControlStateNormal];
        [self.button addTarget:self action:@selector(nextPage) forControlEvents: UIControlEventTouchUpInside ];
        [self.view addSubview:self.button];
        
    }
    -(BOOL)textFieldShouldReturn:(UITextField *)textField{
        if ([self.textName isFirstResponder]) {
            [self.textName resignFirstResponder];
        }
        return YES;
    }
    
    
    
    -(void)nextPage
    {
        SecondViewController *second =  [[SecondViewController alloc] init];
        second.str = self.textName.text;
        second.postvalueb = ^(NSString *str){
            self.textName.text = str;
            NSLog(@"%@",str);
        };
        [self presentViewController:second animated:YES completion:^{
            NSLog(@"页面跳转成功");
        }];
        
        
    }
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    #import <UIKit/UIKit.h>
    typedef void(^postValueBlock)(NSString *);
    
    @interface SecondViewController : UIViewController<UITextFieldDelegate>
    @property (nonatomic ,strong) NSString *str;
    @property (nonatomic ,strong) postValueBlock postvalueb;
    @property (nonatomic ,strong)  UITextField *textFil;
    @end
    #import "SecondViewController.h"
    
    @interface SecondViewController ()
    
    @end
    
    @implementation SecondViewController
    
    - (void)viewDidLoad {
        self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"5622630220130817130527093.jpg"]];
        self.textFil = [[UITextField alloc ] initWithFrame:CGRectMake(100, 100, 100, 50)];
        self.textFil.backgroundColor = [UIColor grayColor];
        self.textFil.textColor = [UIColor greenColor];
        //属性传值
        self.textFil.text = self.str;
        self.textFil.delegate = self;
        [self.view addSubview:self.textFil];
        
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    -(BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        if(self.postvalueb){
                   self.postvalueb(self.textFil.text);
            
        }
        if ([self.textFil isFirstResponder]) {
            [self.textFil resignFirstResponder];
        }
        [self dismissViewControllerAnimated:YES completion:nil];
        
        return YES;
    }
    
    
    @end
    

     3.单列传值

    #import <UIKit/UIKit.h>
    //创建一个单列类
    @interface MyPickerView : UIPickerView<NSCopying>
    +(MyPickerView *)shareInstance;
    @end
    //创建一个单列类
    #import "MyPickerView.h"
    static MyPickerView *singleton;
    @implementation MyPickerView
    +(MyPickerView *)shareInstance
    {    if(singleton == nil)
         {
           singleton = [[MyPickerView alloc] init];
         }
        return singleton;
    }
    +(instancetype)allocWithZone:(struct _NSZone *)zone{
        if (singleton == nil) {
            singleton = [super allocWithZone:zone];
        }
        return singleton;
    }
    -(id)copyWithZone:(NSZone *)zone
    {
        return self;
    }
    
    @end
    #import <UIKit/UIKit.h>
    #import "MyPickerView.h"
    #import "SecondViewController.h"
    @interface ViewController : UIViewController<UIPickerViewDataSource,UIPickerViewDelegate>
    @property (nonatomic ,strong) NSArray *array;
    @property (nonatomic ,strong) MyPickerView *mypickerV;
    @property (nonatomic ,strong)  UIButton *button;
    
    
    @end
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor brownColor];
        self.array = @[@"aa",@"bb",@"cc",@"dd"];
        self.mypickerV = [[MyPickerView alloc] initWithFrame:CGRectMake(100, 200, 100, 100)];
        self.mypickerV.delegate = self;
        self.mypickerV.dataSource = self;
        self.mypickerV.backgroundColor = [UIColor grayColor];
        [self.view addSubview:self.mypickerV];
        
        
        self.button = [[UIButton alloc] initWithFrame:CGRectMake(100, 310, 100, 40)];
        self.button.backgroundColor = [UIColor greenColor];
        [self.button setTitle:@"下一页" forState: UIControlStateNormal];
        [self.button addTarget:self action:@selector(nextPage) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:self.button];
        
        
    }
    
    
    -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
        
        return 1;
    }
    -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
        return self.array.count;
    }
    
    -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
        
        return self.array[row];
        
    }
    
    -(void)nextPage
    {
        SecondViewController *second = [[SecondViewController alloc] init];
        [self presentViewController:second animated:YES completion:nil];
        
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    #import <UIKit/UIKit.h>
    #import "MyPickerView.h"
    #import "ThirdViewController.h"
    @interface SecondViewController : UIViewController
    @property (nonatomic ,strong) MyPickerView  *mypick;
    @property (nonatomic ,strong)  UIButton *button;
    @end
    
    #import "SecondViewController.h"
    
    @interface SecondViewController ()
    
    @end
    
    @implementation SecondViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor blueColor];
            self.mypick = [[MyPickerView alloc] init];
              [self.view addSubview:self.mypick];
        
        self.button = [[UIButton alloc] initWithFrame:CGRectMake(100, 310, 100, 40)];
        self.button.backgroundColor = [UIColor greenColor];
        [self.button setTitle:@"下一页" forState: UIControlStateNormal];
        [self.button addTarget:self action:@selector(nextPage) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:self.button];
        self. mypick.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"u=113715476,712357466&fm=21&gp=0.jpg"]];
     
        
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
    
    }
    
    
    -(void)nextPage
    {
        ThirdViewController *third = [[ThirdViewController alloc] init];
        
        [self viewDidAppear:YES];
        [self presentViewController:third animated:YES completion:nil];
        
    }
    
    @end
    #import <UIKit/UIKit.h>
    #import "MyPickerView.h"
    #import "ViewController.h"
    @interface ThirdViewController : UIViewController
    @property (nonatomic ,strong) MyPickerView *mypick;
    @property (nonatomic ,strong)  UIButton *button;
    @end
    #import "ThirdViewController.h"
    
    @interface ThirdViewController ()
    
    @end
    
    @implementation ThirdViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.mypick = [[MyPickerView alloc] init];
        [self.view addSubview:self.mypick];
        
        self.button = [[UIButton alloc] initWithFrame:CGRectMake(100, 310, 100, 40)];
        self.button.backgroundColor = [UIColor greenColor];
        [self.button setTitle:@"下一页" forState: UIControlStateNormal];
        [self.button addTarget:self action:@selector(nextPage) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:self.button];
    
    
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    -(void)nextPage
    {
        ViewController *second = [[ViewController alloc] init];
       
        [self presentViewController:second animated:YES completion:nil];
        
    }
    -(void)viewDidAppear:(BOOL)animated{
        [super viewDidAppear:animated];
        
    }
    
    @end
    

     4.通知传值

    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        NSDictionary *dic = @{@"name":@"liumu",
                              @"age":@"22"};
                              
        
        NSNotification *notification = [[NSNotification alloc] initWithName:@"show" object:nil userInfo:dic];
        // 取value值
        [[NSNotificationCenter defaultCenter]
         postNotificationName:@"show" object:notification];
        //发送消息取键值
       // [[NSNotificationCenter defaultCenter] postNotification:notification];
        
          SecondViewController *second = [[SecondViewController alloc] init];
        [self presentViewController:second animated:YES completion:nil];
    
    }
    @end
    #import <UIKit/UIKit.h>
    
    @interface SecondViewController : UIViewController
    @property (nonatomic ,strong) UITextField *TextFil;
    @end
    
    #import "SecondViewController.h"
    
    @interface SecondViewController ()
    
    @end
    
    @implementation SecondViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor purpleColor];
        self.TextFil.backgroundColor = [UIColor blueColor];
        self.TextFil = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
        self.TextFil.textColor = [UIColor greenColor];
        [self.view addSubview:self.TextFil];
        
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(Show:) name:@"show" object:nil];
        
        
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
    
    }
    
    //传值
    -(void)Show:(NSNotification *)notification
    {
       NSString *str=(NSString *)[notification object];
        //self.TextFil.text = str;
        NSLog(@"%@",str);
    }
    
    //注册完毕,销毁通知
    -(void)dealloc{
        [[NSNotificationCenter defaultCenter] removeObserver:self name:@"show" object:nil];
    }
    
    
    
    
    @end
  • 相关阅读:
    打印沙漏
    秋季学期学习总结
    bzoj1059[ZJOI2007]矩阵游戏 二分图匹配
    bzoj1055[HAOI2008]玩具取名 区间dp
    bzoj1053[HAOI2007]反素数ant
    bzoj1049[HAOI2006]数字序列
    bzoj1046[HAOI2007]上升序列
    bzoj1044[HAOI2008]木棍分割 单调队列优化dp
    bzoj3930[CQOI2015]选数 容斥原理
    bzoj1069 [SCOI2007]最大土地面积 旋转卡壳
  • 原文地址:https://www.cnblogs.com/liumu/p/5343076.html
Copyright © 2020-2023  润新知