zoukankan      html  css  js  c++  java
  • iOS 不同类之间的传值

      iOS是面向对象开发的,有很多不同的类,很多时候会遇到类与类之间的"交流"需求,比如通知、传递数值等等,(通知可以用nsnotificationcenter来做, 以后总结)下面主要总结一下类之间的传值方式。

    1、属性传值

      前向后传值


    2、协议传值


    3、Block传值

    代替协议代理传值,主要时间点问题。


    4、单例传值
    数据共享。


    5、通知传值

    通知中心
    NSNotificationCenter提供了一种更加解耦的方式。最典型的应用就是任何对象对可以发送通知到中心,同时任何对象可以监听中心的通知。
    发送通知的代码如下:

    [[NSNotificationCenter defaultCenter]      postNotificationName:@”myNotificationName”     object:broadcasterObject];


    注册接收通知的代码如下:

    [[NSNotificationCenter defaultCenter]      addObserver:listenerObject      selector:@selector(receivingMethodOnListener:)      name:@”myNotificationName”     object:nil];
    注册通知的时候可以指定一个具体的广播者对象,但这不是必须的。你可能注意到了defaultCenter 。实际上这是你在应用中会使用到的唯一的中心。通知会向整个应用开放,因此只有一个中心。
    同时还有一个NSDistributedNotificationCenter。这是用来应用间通信的。在整个计算机上只有一个该类型的中心。
    优点: 通知的发送者和接受者都不需要知道对方。可以指定接收通知的具体方法。通知名可以是任何字符串。
    缺点: 较键值观察需要多点代码。在删掉前必须移除监听者。不能传大量数值,只能让谁去做什么事。

     

     

    1、使用SharedApplication,定义一个变量来传递.

    2、使用文件,或者NSUserdefault来传递

    3、通过一个单例的class来传递

    4、通过Delegate来传递。(常用)

      iOS开发使用委托delegate在不同窗口之间传递数据是本文要介绍的内容,主要是来讲解如何使用委托delegate在不同窗口之间传递数据,具体内容来看详细内容。在IOS开发里两个UIView窗口之间传递参数方法有很多,比如

    前面3种方法,暂且不说,这次主要学习如何使用通过Delegate的方法来在不同的UIView里传递数据

     

    比如: 在窗口1中打开窗口2,然后在窗口2中填入一个数字,这个数字又回传给窗口1。

     

    窗口1

     

    IOS开发使用委托delegate在不同窗口之间传递数据

     

    窗口2

     

    IOS开发使用委托delegate在不同窗口之间传递数据

     

    窗口2的结果传递给窗口1

     

    IOS开发使用委托delegate在不同窗口之间传递数据

     

    1、首先定义个一委托UIViewPassValueDelegate用来传递值

     

    @protocol UIViewPassValueDelegate  
    - (void)passValue:(NSString *)value;  
    @end 

     

    这个protocol 就是用来传递值

     

    2、在窗口1的头文件里,声明delegate

     

    复制代码
    复制代码
    #import <UIKit/UIKit.h> 
    #import "UIViewPassValueDelegate.h"  
    @interface DelegateSampleViewController : UIViewController <UIViewPassValueDelegate> 
    {  
        UITextField *_value;  
    }  
    @property(nonatomic, retain) IBOutlet UITextField *value;  
    - (IBAction)buttonClick:(id)sender;  
    @end 
    复制代码
    复制代码

     

    并实现这个委托

     

    - (void)passValue:(NSString *)value  
    {  
      self.value.text = value;  
        NSLog(@"the get value is %@", value);  
    } 

     

    button的Click方法,打开窗口2,并将窗口2的delegate实现方法指向窗口1。

     

    复制代码
    复制代码
    - (IBAction)buttonClick:(id)sender  
    {  
        ValueInputView *valueView = [[ValueInputView alloc] initWithNibName:@"ValueInputView" bundle:[NSBundle mainBundle]];  
        valueView.delegate = self;  
        [self setModalTransitionStyle:UIModalTransitionStyleCoverVertical];  
        [self presentModalViewController:valueView animated:YES];  
    } 
    复制代码
    复制代码

     

    第二个窗口的实现

     

    .h 头文件

     

    复制代码
    复制代码
    #import <UIKit/UIKit.h> 
    #import "UIViewPassValueDelegate.h"  
     
    @interface ValueInputView : UIViewController {  
     
        NSObject<UIViewPassValueDelegate> * delegate;  
        UITextField *_value;  
    }  
    @property(nonatomic, retain)IBOutlet UITextField *value;  
    @property(nonatomic, retain) NSObject<UIViewPassValueDelegate> * delegate;  
    - (IBAction)buttonClick:(id)sender;  
    @end 
    复制代码
    复制代码

     

    .m实现文件

     

    复制代码

     

    复制代码

     

    #import "ValueInputView.h"  
    @implementation ValueInputView  
    @synthesize delegate;  
    @synthesize value = _value;  
    - (void)dealloc {  
        [self.value release];  
        [super dealloc];  
    }  
     
    - (IBAction)buttonClick:(id)sender  
    {  
        [delegate passValue:self.value.text];  
        NSLog(@"self.value.text is%@", self.value.text);  
        [self dismissModalViewControllerAnimated:YES];      
         
    }  
    - (void)didReceiveMemoryWarning {  
        // Releases the view if it doesn't have a superview.  
        [super didReceiveMemoryWarning];  
          
        // Release any cached data, images, etc. that aren't in use.  
    }  
     
    - (void)viewDidUnload {  
        [super viewDidUnload];  
        // Release any retained subviews of the main view.  
        // e.g. self.myOutlet = nil;  
    }  
     
     
    @end 

     

  • 相关阅读:
    shiro (java安全框架)
    day13
    自己修改select的样式(修改select右边的小三角)
    如何让2个并列的div根据内容自动保持同等高度
    js定时显示广告代码
    jquery 模块拖拽
    JS获取浏览器可视区域尺寸
    jQuery事件绑定的最佳实践
    flot图插件使用
    计算json的和
  • 原文地址:https://www.cnblogs.com/A--G/p/4538218.html
Copyright © 2011-2022 走看看