• iOS之页面传值


    页面之间的传值方式
    设有firstView和secondView两个视图
    属性传值(适用于页面之间的正向传值)
    1、在要显示信息的页面,创建属性
    2、在要传值的页面,设置属性值
    3、在显示信息的页面的ViewdidLoad方法中,接收属性值
     
     
    代理传值(适用于页面之间的反向传值)
    1、创建协议及协议方法,在反向传值的页面(secondVC)中
    2、创建协议类型的属性,   在secondVC中创建属性
    3、调用属性  即delegate,在secondVC页面中的对象传值的方法中调用[self.delegate   postValue:self.textName.text];
    4、在第一页,即显示修改过信息的页面遵循协议,实现协议的方法,指定代理(即在页面传递参数的方法中为代理赋值)
    second.delegate=self;
     
     
     
    代码块传值(适用于反向传值)
    1、声明一个代码块(second###)
    2、声明一个代码块类型的属性(second###)
    3、调用代码块(second###)
    3、实现代码块(first###)
     
    ViewController.h

    //声明一个文本框和一个按钮

    @property(strong,nonatomic)UITextField *textName;

    @property(strong,nonatomic)UIButton *button;

    ViewController.m

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view, typically from a nib.

        

        self.textName=[[UITextField alloc] initWithFrame:CGRectMake(100, 100, 150, 40)];

        self.textName.borderStyle=1;

        

        self.button=[[UIButton alloc] initWithFrame:CGRectMake(100, 200, 100, 40)];

        self.button.backgroundColor=[UIColor redColor];

        [self.button setTitle:@"按钮" forState:UIControlStateNormal];

        

        [self.button addTarget:self action:@selector(nextPage) forControlEvents:UIControlEventTouchUpInside];

        

        [self.view addSubview:self.textName];

        [self.view addSubview:self.button];

        

        //指定代理

    //    self.textName.delegate=self;

        

        

        

    }

    -(void)nextPage

    {

        secondViewController *second=[[secondViewController alloc] init];

        

        second.str=self.textName.text;

        

        //代理

    //    second.delegate=self;

        

        second.myblock=^(NSString *str)

        {

            self.textName.text=str;

        };

        

        [self presentViewController:second animated:YES completion:^{

            NSLog(@"转到下一页");

        }];

    }

    //协议方法的实现

    -(void)postValue:(NSString *)value

    {

        self.textName.text=value;

    }

    secondViewController.h

    typedef void(^ValueBlock)(NSString *str);

    //代理传值中的协议

    @protocol postValueDelegate <NSObject>

    -(void)postValue:(NSString *)value;

    @end

    //遵循协议

    @interface secondViewController : UIViewController<UITextFieldDelegate>

    @property(strong,nonatomic)NSString *str;

    @property(strong,nonatomic)UITextField *txt2;

    @property(strong,nonatomic)UIButton *button2;

    //用协议定义的一个属性

    @property(strong,nonatomic)id<postValueDelegate> delegate;

    //代码块定义的一个属性

    @property(strong,nonatomic)ValueBlock myblock;

    secondViewController.m

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view.

        

        self.view.backgroundColor=[UIColor grayColor];

        

        self.txt2=[[UITextField alloc] initWithFrame:CGRectMake(100, 100, 150, 40)];

        self.txt2.borderStyle=1;

        [self.view addSubview:self.txt2];

        

    //    self.button2=[[UIButton alloc] initWithFrame:CGRectMake(100, 200, 100, 40)];

    //    [self.button2 setTitle:@"返回" forState:UIControlStateNormal];

        

    //    [self.button2 addTarget:self action:@selector(backPage) forControlEvents:UIControlEventTouchUpInside];

        

        [self.view addSubview:self.button2];

        

           

        //属性传值

        self.txt2.text=self.str;

        

        NSLog(@"str=%@",self.str);

        

        self.txt2.delegate=self;

          

    }

    //-(void)backPage

    //{

    //    //代理传值

    //    if (self.delegate)

    //    {

    //        [self.delegate postValue:self.txt2.text];

    //    }

    //    

    //    

    //    [self dismissViewControllerAnimated:YES completion:^{

    //        NSLog(@"返回");

    //    }];

    //}

    -(BOOL)textFieldShouldReturn:(UITextField *)textField

    {

        //代码块传值

        if (self.myblock)

        {

            self.myblock(textField.text);

        }

        

        if ([textField isFirstResponder])

        {

            [textField resignFirstResponder];

        }

        

        [self dismissViewControllerAnimated:YES completion:^{

            NSLog(@"返回");

        }];

        

        return YES;

    }

     
    除了上面三种传值方式,还有单例传值,通知传值,更新中......
  • 相关阅读:
    ZOJ2402 Lenny's Lucky Lotto List 简单DP
    HDU1024 最大M子段和问题 (单调队列优化)
    HDU2048 HDU2049 组合数系列 错排
    HDU1081 最大字段和 压缩数组(单调队列优化)
    HDU1166 数状数组
    HDU1085 多重背包
    HDU3062
    递归 递推 规律
    【机器学习PAI实战】—— 玩转人工智能之美食推荐
    阿里开源自用 OpenJDK 版本,Java 社区迎来中国力量
  • 原文地址:https://www.cnblogs.com/layios/p/5281616.html
Copyright © 2020-2023  润新知