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

    我不负责生产代码,我是博客园搬运工~
  • 相关阅读:
    SAP PI 如何实现消息定义查询
    EWM与ERP交互程序
    ITS Mobile Template interpretation failed. Template does not exist
    SAP Material Flow System (MFS) 物料流系统简介
    SAP EWM Table list
    EWM RF 屏幕增强
    SAP EWM TCODE list
    SAP扩展仓库管理(SAPEWM)在线研讨会笔记
    ERP与EWM集成配置ERP端组织架构(二)
    EWM RF(Radio Frequency)简介
  • 原文地址:https://www.cnblogs.com/masami521/p/4724411.html
Copyright © 2011-2022 走看看