• iOS--页面间的代理传值(属性、代理(委托)、代码块、单例、通知)


    (一)属性传值 

     

    (二)代理(委托)传值


    代理传值
    适用于 反向传值 (从后往前传)
    1.1 创建协议 及协议方法 在反向传值的页面(SecondViewController)中
    1.2 创建协议类型的属性 在SecondViewController中创建属性id<postValueDelegate> delegate
    1.3 调用属性 即delegate
    SecondViewController页面中 对象传值的方法中调用
    [self.delegate postValue:self.textName.text];
    1.4 在第一页 即显示修改过信息的页面
    遵循协议 实现协议方法 指定代理对象(即 在页面传值参数的方法中为代理赋值)
    secondVc.delegate=self

    文件目录:

    FirstViewController.h

    #import <UIKit/UIKit.h>
    #import "SecondViewController.h"
    @interface FirstViewController : UIViewController<UITextFieldDelegate,postValue>
    
    @property(strong,nonatomic) UITextField *textName;
    @property(strong,nonatomic) UIButton *nextbutton;
    
    @end

    FirstViewController.m

    #import "FirstViewController.h"
    
    @interface FirstViewController ()
    
    @end
    
    @implementation FirstViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor=[UIColor redColor];
        self.textName=[[UITextField alloc] initWithFrame:CGRectMake(100, 100, 200,50)];
        self.textName.borderStyle=UITextBorderStyleLine;
        self.textName.delegate=self;
        [self.view addSubview:self.textName];
        
        self.nextbutton=[[UIButton alloc] initWithFrame:CGRectMake(200, 200, 100, 50)];
        [self.nextbutton setTitle:@"下一页" forState:UIControlStateNormal];
        self.nextbutton.backgroundColor=[UIColor grayColor];
        [self.nextbutton addTarget:self action:@selector(nextPage) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:self.nextbutton];
        
    }
    
    -(BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        if ([textField isFirstResponder]) {
            [textField resignFirstResponder];
        }
        
        return YES;
    }
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self.textName resignFirstResponder];
    }
    
    -(void)nextPage
    {
        SecondViewController *secondVc=[[SecondViewController alloc] init];
        secondVc.str=self.textName.text;
        secondVc.deletage=self;
        [self presentViewController:secondVc animated:YES completion:nil];
    }
    
    -(void)postValue:(NSString *)str
    {
        self.textName.text=str;
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end

    SecondViewController.h

    #import <UIKit/UIKit.h>

      // 创建协议

    @protocol postValue <NSObject>
    
    -(void)postValue:(NSString *)str;
    
    @end
    
    @interface SecondViewController : UIViewController<UITextFieldDelegate>
    
    @property(strong,nonatomic) UITextField *textInfo;
    @property(strong,nonatomic) UIButton *backbutton;
    @property(strong,nonatomic) NSString *str;
    
    @property(strong,nonatomic) id<postValue> deletage;
    
    @end

    SecondViewController.m

    #import "SecondViewController.h"
    
    @interface SecondViewController ()
    
    @end
    
    @implementation SecondViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor=[UIColor colorWithRed:0.541 green:0.878 blue:0.831 alpha:1.000];
        
        self.textInfo=[[UITextField alloc] initWithFrame:CGRectMake(100, 100, 200, 50)];
        self.textInfo.borderStyle=UITextBorderStyleLine;
        self.textInfo.text=self.str;
        self.textInfo.delegate=self;
        
        [self.view addSubview:self.textInfo];
        
        self.backbutton=[[UIButton alloc] initWithFrame:CGRectMake(100, 200, 100, 50)];
        [self.backbutton setTitle:@"上一页" forState:UIControlStateNormal];
        self.textInfo.text=self.str;
        [self.backbutton addTarget:self action:@selector(backPage) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:self.backbutton];
        
    }
    
    -(BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        if ([textField isFirstResponder]) {
            [textField resignFirstResponder];
        }
        
        return YES;
    }
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self.textInfo resignFirstResponder];
    }
    
    
    -(void)backPage
    {
        if (self.deletage!=0) {
            [self.deletage postValue:self.textInfo.text];
        }
        
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    @end

    AppDelegate.h

    #import <UIKit/UIKit.h>
    #import"FirstViewController.h"
    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    
    @property (strong, nonatomic) UIWindow *window;
    
    @end

    AppDelegate.m

    #import "AppDelegate.h"
    
    @interface AppDelegate ()
    
    @end
    
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        FirstViewController *firstVc=[[FirstViewController alloc] init];
        
        self.window.rootViewController=firstVc;
        
        return YES;
    }
    .......

    @end

    (三)代码块传值

    (四)通知传值

    (五)单例传值

     

  • 相关阅读:
    Qt之JSON生成与解析
    Qt的QLineEdit显示密码
    Ubuntu14.04 64位运行32位程序
    Xcode 7在支持ipad的设备中需要支持分屏!
    「模板」平衡树
    [NOI2016]区间 题解(决策单调性+线段树优化)
    [NOIP模拟测试12]题解
    [笔记乱写]0/1分数规划
    [NOIP模拟测试11] 题解
    [SCOI2014]方伯伯的玉米田 题解(树状数组优化dp)
  • 原文地址:https://www.cnblogs.com/bolin-123/p/5281625.html
Copyright © 2020-2023  润新知