美文网首页
多界面传值

多界面传值

作者: yz_wang | 来源:发表于2016-12-08 11:10 被阅读0次

    1. 基本概念

    页面传值有多种方式,今天学的是通过属性传值和代理传值。属性传值就是通过一个按钮或者其他的控件加上触发函数传值。

    2. 属性传值

    删去ViewController文件,在新建三个视图控制器文件。在AppDelegare中创建window和视图一和视图三,还有一个工具栏一个导航栏:

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #4f8187}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #bb2ca2}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400}p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3d1d81}p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa}span.s1 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s6 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s7 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s8 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s9 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}
    
    #import "AppDelegate.h"
    #import "VCFirst.h"
    #import "VCThird.h"
    
    @interface AppDelegate ()
    
    @end
    
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        
        self.window=[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
        [self.window makeKeyAndVisible];
        
        
        VCFirst* vcFirst=[[VCFirst alloc]init];
        vcFirst.title=@"视图一";
        vcFirst.view.backgroundColor=[UIColor whiteColor];
        UINavigationController* nav=[[UINavigationController alloc]initWithRootViewController:vcFirst];
        
        VCThird* vcThird=[[VCThird alloc]init];
        vcThird.title=@"视图三";
        vcThird.view.backgroundColor=[UIColor greenColor];
        UINavigationController* nav2=[[UINavigationController alloc]initWithRootViewController:vcThird];
        NSArray* array=[NSArray arrayWithObjects:nav,nav2,nil];
        UITabBarController* tabVC=[[UITabBarController alloc]init];
        tabVC.viewControllers=array;
        
        self.window.rootViewController=tabVC;
        
        return YES;
    }
    

    然后在视图一中创建视图二:

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #bb2ca2}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3d1d81}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa}p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s6 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s7 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s8 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #000000}span.s9 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s10 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s11 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}
    
    @implementation VCFirst
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
    }
    
    -(void)changeColor:(UIColor *)color
    {
        self.view.backgroundColor=color;
    }
    
    //创建视图控制器二
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        VCSecond* vcSecond=[[VCSecond alloc]init];
        
        //将当前的控制器作为代理对象赋值
        //delegate相当于是vcSecond的属性
        // vcSecond.delegate=self;
        
        vcSecond.title=@"视图二";
        vcSecond.view.backgroundColor=[UIColor purpleColor];
        [self.navigationController pushViewController:vcSecond animated:YES];
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    

    视图结构为:
    ----视图一 ---->视图二
    ----视图三

    这时在VCFirst中可以直接改变视图二的颜色。

    3. 代理传值

    这部分主要解决怎么通过改变视图二中的代码,可以控制改变视图一的颜色。

    在视图二中添加一个按钮:

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3d1d81}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s6 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        
        UIBarButtonItem* btnChange=[[UIBarButtonItem alloc]initWithTitle:@"改变颜色" style:UIBarButtonItemStyleDone target:self action:@selector(pressChange)];
        
        self.navigationItem.rightBarButtonItem=btnChange;
    }
    

    然后在视图二的头文件里定义协议:

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #bb2ca2}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa}span.s1 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s5 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s6 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s7 {font-variant-ligatures: no-common-ligatures; color: #4f8187}
    
    #import <UIKit/UIKit.h>
    
    //定义一个代理协议
    //是视图控制器二的协议
    @protocol  VCSecondDelegate <NSObject>
    
    //定义协议函数
    -(void)changeColor:(UIColor*)color;
    @end
    
    @interface VCSecond : UIViewController
    @property(assign,nonatomic)NSInteger tag;
    
    //定义一个代理对象
    //代理对象会执行协议函数
    //通过代理对象实现协议函数,达到代理对象改变本身属性的目的
    //代理对象一定要实现代理协议
    @property(assign,nonatomic)id<VCSecondDelegate> delegate;
    
    @end
    

    在视图一创建视图二的过程中将视图一赋值为代理对象:

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}
    
    vcSecond.delegate=self;
    

    完整代码即

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3d1d81}span.s1 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s6 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s7 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #000000}span.s8 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s9 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s10 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s11 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}
    
    //创建视图控制器二
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        VCSecond* vcSecond=[[VCSecond alloc]init];
        
        //将当前的控制器作为代理对象赋值
        //delegate相当于是vcSecond的属性
        vcSecond.delegate=self;
        
        vcSecond.title=@"视图二";
        vcSecond.view.backgroundColor=[UIColor purpleColor];
        [self.navigationController pushViewController:vcSecond animated:YES];
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    

    最后去视图二中实现按钮触发函数:

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}span.s1 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s6 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s7 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s8 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}
    
    //点击按钮时触发事件
    -(void)pressChange
    {
        //代理对象调用事件函数
        [_delegate changeColor:[UIColor redColor]];
    }
    
    

    最终效果:

    屏幕快照 2016-12-08 上午11.04.57.png 屏幕快照 2016-12-08 上午11.05.06.png 屏幕快照 2016-12-08 上午11.05.13.png

    相关文章

      网友评论

          本文标题:多界面传值

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