zoukankan      html  css  js  c++  java
  • IOS各种传值方式

    属性传值 将A页面所拥有的信息通过属性传递到B页面使用

    B页面定义了一个naviTitle属性,在A页面中直接通过属性赋值将A页面中的值传到B页面。

    #import <UIKit/UIKit.h>

    #import "DetailViewController.h"

    @interface RootViewController :UIViewController<ChangeDelegate>

    {

        UITextField *tf;

    }

    @end

    A RootViewController.m页面实现文件

    #import "RootViewController.h"

    #import "DetailViewController.h"

    @interface RootViewController ()

    @end

    @implementation RootViewController

    //核心代码

    -(void)loadView

    {

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

        btn.frame = CGRectMake(0, 0, 100, 30);

        [btn setTitle:@"Push" forState:0];

        [btn addTarget:self action:@selector(pushAction:) forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:btn];

    }

    -(void)pushAction:(id)sender

    {

        tf = (UITextField *)[self.viewviewWithTag:1000];

        //导航push到下一个页面

        //pushViewController 入栈引用计数+1,且控制权归系统

        

        DetailViewController *detailViewController = [[DetailViewControlleralloc]init];

        //属性传值,直接属性赋值

        detailViewController.naviTitle =tf.text;

        //导航push到下一个页面

        [self.navigationControllerpushViewController:detailViewController animated:YES];

        [detailViewControllerrelease];   

    }

    B页面DetailViewController.h文件

    #import <UIKit/UIKit.h>

    @interface DetailViewController :UIViewController

    {

       UITextField *textField;

       NSString *_naviTitle;

    }

    @property(nonatomic,retain)NSString *naviTitle;

    @end

    B页面.m实现文件

    #import "DetailViewController.h"

    @interface DetailViewController ()

    @end

    @implementation DetailViewController

    @synthesize naviTitle =_naviTitle;

    -(void)loadView

    {

        self.view = [[[UIViewalloc]initWithFrame:CGRectMake(0,0, 320,480)]autorelease];

       self.title = self.naviTitle ;    

    }

    代理传值 

    A页面push到B页面,如果B页面的信息想回传(回调)到A页面,用用代理传值,其中B定义协议和声明代理,A确认并实现代理,A作为B的代理

    A页面RootViewController.h文件

    #import <UIKit/UIKit.h>

    #import "DetailViewController.h"

    @interface RootViewController : UIViewController<ChangeDelegate>

    {

        UITextField *tf;

    }

    @end

    A页面RootViewController.m实现文件

    #import "RootViewController.h"

    #import "DetailViewController.h"

    @interface RootViewController ()

    @end

    @implementation RootViewController

    //核心代码

    -(void)loadView

    {

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

        btn.frame = CGRectMake(0, 0, 100, 30);

        [btn setTitle:@"Push" forState:0];

        //A页面push到B页面

        [btn addTarget:self action:@selector(pushAction:) forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:btn];

    }

    -(void)pushAction:(id)sender

    {

        tf = (UITextField *)[self.view viewWithTag:1000];

        //导航push到下一个页面

        //pushViewController 入栈引用计数+1,且控制权归系统

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

         //代理传值

       detailViewController.delegate =self;//让其自身作为代理人

        //导航push到下一个页面

        [self.navigationController pushViewController:detailViewController animated:YES];

        [detailViewController release];   

    }

    //实现代理方法

    -(void)changeTitle:(NSString *)aStr

    {

        tf = (UITextField *)[self.view viewWithTag:1000];

        tf.text = aStr;//将从B页面传入的参数赋给A页面中的TextField

       tf.text = aStr;

    }

    B页面DetailViewController.m文件

    #import <UIKit/UIKit.h>

    @interface DetailViewController : UIViewController

    {

        UITextField *textField;

        //定义代理

      id<ChangeDelegate>_delegate;

    }

    @property(nonatomic,assign)id<ChangeDelegate> delegate;

    @end

    //定义协议

    @protocol ChangeDelegate <NSObject>

    -(void)changeTitle:(NSString *)aStr;//协议方法

    @end

     

    B页面DetailViewController.h实现文件

    #import "DetailViewController.h"

    @interface DetailViewController ()

    @end

    @implementation DetailViewController

    -(void)loadView

    {

        self.view = [[[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)]autorelease];

        UIBarButtonItem *doneItem = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDonetarget:selfaction:@selector(doneAction:)];

        self.navigationItem.rightBarButtonItem = doneItem;

        [doneItemrelease];

    }

    //pop回前一个页面

    -(void)doneAction:(id)sender

    {

       if (self.delegate && [self.delegaterespondsToSelector:@selector(changeTitle:)])//若代理存在且响应了changeTitle这个方法

        {

            //[self.delegate changeTitle:textField.text];

            [self.delegatechangeTitle:textField.text];//将textField.text参数传给changeTitle方法  让代理,也就是A页面去实现这个方法

            NSLog(@"%@",self.navigationController.viewControllers);

            [self.navigationControllerpopViewControllerAnimated:YES];

        }

    }

    Block

    几种形式的Block

        //无返回值
        void (^block1) (void);
        block1 = ^{
            NSLog(@"bock demo");
        };
        block1();
        
        //int返回类型
        int (^block2) (void);
        block2  = ^(void)
        {
            int a  = 1 ,b =1;
            int c = a+b;
            return  c;
        };
        
        //有返回 有参数
        int (^block3)(int, int)= ^(int a, int b)
        {
            int c = a +b;
            return c;
            
        };
        NSLog(@"bock=%d",block3(1,2));
        
        //有返回值,有参数并且可以修改block之外变量的block
        static int sum = 10;// __blcik and static关键字 或者 _block int sum = 10
        int (^block4) (int) =^(int a)
        {
            sum=11;
            int c = sum+a;   //此时sum就是可以修改的了,若没加static或_block关键字则不能修改block之外变量
            return c;
        };
        NSLog(@"block4= %d",block4(4));

    Block传值

    例如A(Ablock)页面的值传道B(Bblock)页面  

    在A页面中ABlock.h

    @interface Ablock : UIViewController<UITableViewDelegate,UITableViewDataSource>
    {
        UITableView *_tableview;
        UILabel *labe;
        UIImageView *imagevies;
    }
    @end

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [_tableview deselectRowAtIndexPath:indexPath animated:YES];
        
        Bblcok *bblock = [[Bblcok alloc] initwithBlock:Block_copy(^(NSString *aBlock){    
            labe.text = aBlock;
            NSLog(@"%@",aBlock);

        })];
        

        bblock.imgeviews = imagevies.image;
        bblock.String = labe.text;
        [self.navigationController pushViewController:bblock animated:YES];
        [bblock release];
    }

    在A页面中Bblock.h

    #import <UIKit/UIKit.h>
    typedef  void (^MyBlock) (NSString *);
    @interface Bblcok : UIViewController
    {
        UIImageView *image;
        UITextField *aField;
        UIButton *aButt;
        NSString *_String;
        id _imgeviews;
        MyBlock myBlock;
    }
    @property(nonatomic,copy)MyBlock myBlock;   
    @property(nonatomic,retain) id imgeviews;
    @property(nonatomic,retain) NSString *String;
    -(id)initwithBlock:(MyBlock)aBlcok;
    @end

    //
    //  Bblcok.m
    //  Blcok
    //
    //  Created by zhu  on 13-8-12.
    //  Copyright (c) 2013年 Zhu Ji Fan. All rights reserved.
    //

    #import "Bblcok.h"

    @interface Bblcok ()

    @end

    @implementation Bblcok
    @synthesize imgeviews = _imgeviews , String = _String;
    @synthesize myBlock = _myBlock;
    -(id)initwithBlock:(MyBlock)aBlcok
    {
        if (self = [super init])
        {
            self.myBlock = aBlcok; 
        }
        return self;
    }

    -(void) dealloc
    {
        [super dealloc];
    }

    -(void) loadView
    {
        UIControl *cont = [[UIControl alloc] initWithFrame:CGRectMake(0, 0, 320, 568-44)];
        [cont addTarget:self action:@selector(Clcik) forControlEvents:UIControlEventTouchUpInside];
        self.view = cont;
        
        aField = [[UITextField alloc] initWithFrame:CGRectMake(60, 10, 160, 30)];
        aField.borderStyle = UITextBorderStyleLine;
        aField.placeholder = self.String;
        [self.view addSubview:aField];
        
        aButt = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        aButt.frame = CGRectMake(60, 50, 70, 30);
        [aButt setTitle:@"修改" forState:0];
        [aButt addTarget:self action:@selector(aButtClcik:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:aButt];
        
        image = [[UIImageView alloc] initWithFrame:CGRectMake(60, 100, 210, 260)];
        image.backgroundColor = [UIColor blueColor];
        image.image = self.imgeviews;
        [self.view addSubview:image];
        [image release];

    }

    -(IBAction)aButtClcik:(id)sender
    {
        NSString *sting = aField.text;
        myBlock(sting);
        [self.navigationController popToRootViewControllerAnimated:YES];
    }


    -(void)Clcik
    {
        [aField resignFirstResponder];
    }
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
    }

    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }

    @end

    我不负责生产代码,我是博客园搬运工~
  • 相关阅读:
    c#中的对象生命周期
    数据抓取的艺术(三):抓取Google数据之心得
    redmine3.3.0安装问题
    wget 无法建立ssl连接 [ERROR: certificate common name ?..ssl.fastly.net?.doesn?. match requested host name ?.ache.ruby-lang.org?. To connect to cache.ruby-lang.org insecurely, use ?.-no-check-certificate?]
    Centos安装ruby
    Redmine插件的安装与卸载,知识库插件安装。
    Nexus网页直接上传jar包
    mvn deploy命令上传包
    一辈子只有1次成为BAT的机会,你如何把握?
    redmine创建新闻,自动发邮件给项目组所有成员
  • 原文地址:https://www.cnblogs.com/masami521/p/4724411.html
Copyright © 2011-2022 走看看