02-单例-通知-KVO-Block-代理

原创 2015年07月08日 18:48:39
一、单例:

1.定义单例类
@interface single : NSObject
@property (nonatomic, copy) NSString *name;
+ (id)shareInstance;
@end

#import "single.h"
static single *instance = nil;
@implementation single

+ (
id)shareInstance
{
   
if (instance == nil) {
       
       
instance = [[single alloc] init];
       
    }
   
return instance;
}

@end

2.实现传值
传值者:
 single *s = [single shareInstance];
    s.name = _lable.text;

接收者:

//视图将要显示时调用
- (void)viewWillAppear:(BOOL)animated
{
   
single *s1 = [single shareInstance];
   
lable.text = s1.name;
}






二、通知:

1.发送通知
 //取得输入的数据
    NSString *text = _textFiekd.text;
    NSDictionary *dic = @{
                         
@"key":text
                          };
    //发送通知1
  [[NSNotificationCenter defaultCenter] postNotificationName:@"changeValue" object:self userInfo:dic];
  [self dismissViewControllerAnimated:YES completion:nil];

//发送通知2
[[NSNotificationCenter defaultCenter] postNotificationName:@"tapAction" object:self];

2.接受通知
//接收通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeAction:) name:@"changeValue" object:nil];
 
- (void)changeAction:(NSNotification *)notification {
    //取得传递的数据
   
NSDictionary *dic = notification.userInfo;
    _label.text = dic[@"key"];
}

//接受通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tapAction) name:@"tapAction" object:nil];

- (void)tapAction
{
    _isHidden = !_isHidden;
    self.navigationController.navigationBar.hidden = _isHidden;
    [[UIApplication sharedApplication] setStatusBarHidden:_isHidden];
}

//删除通知
- (void)dealloc
{
    [[
NSNotificationCenter defaultCenter] removeObserver:self];
}







三、KVO观察者模式
1.观察者
接收值
 _secondCtrl = [[SecondViewController alloc] init];
  
//监听secondCtrl的属性值变化
[_secondCtrl addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:nil];
  

//接收到消息后触发的方法
- (
void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(
id)object
                        change:(
NSDictionary *)change
                       context:(
void *)context {

   
NSLog(@"change:%@",change);
   
   
NSString *text = [change objectForKey:@"new"];
   
_label.text = text;
   
}
删除观察者
- (void)dealloc
{
    [_secondCtrl removeObserver:self forKeyPath:@"happyValue" context:NULL];
}



2.被观察者

定义观察属性
@property(nonatomic, copy)NSString *text;

赋值
self.text = _textFiekd.text;






四、Block
1.要传值的一边定义block

typedef  void(^MyBlock)(NSString *text);


@property(nonatomic, copy)MyBlock block;
@property (weak, nonatomic) IBOutlet UITextField *textFiekd;

if(_block != nil){
    _block(_textFiekd.text);
}

2.接收值的一边

- (void)viewWillAppear:(BOOL)animated {

    [
super viewWillAppear:animated];
   
    secondCtrl.block = ^(NSString *text) {
   
        _label.text = text;
    };
}
五、代理

要传值的一边如下配置:
@protocol sendData <NSObject>

- (
void)sendData:(NSString *)text;

@end

@property(nonatomic, assign)id<sendData> delegate;
@property (weak, nonatomic) IBOutlet UITextField *textFiekd;

- (
IBAction)dismissAction:(id)sender {
  
   if (self.delegate respondsToSelector:@selector(sendData:)) {
          [_delegate sendData:_textFiekd.text];
    }
    [
self dismissViewControllerAnimated:YES completion:nil];
}

接收值的一边如下配置:

@interface ViewController ()<sendData>
@property (weak, nonatomic) IBOutlet UILabel *label;


- (IBAction)presentAction:(id)sender {
   
SecondViewController *secondCtrl = [[SecondViewController alloc] init];
   
    secondCtrl.delegate =
self;
   
    [
self presentViewController:secondCtrl animated:YES completion:nil];

}

- (
void)sendData:(NSString *)text {

   
_label.text = text;
   
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

KVO, 通知,单例,协议,代理,KVC(待续)

KVO的全称是Key-Value Observing,它实现了一种机制,对所关心的属性对象添加观察者,当属性值发生变化时会得到通知,我们可以对变化做相应的处理。看过设计模式的同学应该知道,这是一种典型...

iOS 页面间几种传值方式(属性,代理,block,单例,通知)

第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值、block传值 那么第一个视图控制...

导航控制器下UIViewController之间的传值 ------ 代理(delegate)传值 单例传值 Target-Action传值 属性传值 block传值 通知传值

1.代理(delegate)传值 ---- 顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。     实质就是:比如右AB两个页面,A想要传值给B ,就只要先在A中得到B的...

单例的书写与通知、代理、Block简单的传值

一、通知// 1、在需要监听的控制器中创建通知中心,接收通知消息 [[NSNotificationCenter defaultCenter] addObserver:self selector:@se...

iOS 页面间几种传值方式(属性,代理,block,单例,通知

iOS 页面间几种传值方式属性(KVC,KVO),代理(delegate),block,单例,通知(NSNotification)**应用场景:**第二个视图控制器如何获取第一个视图控制的信息 eg:...
  • ChinHan
  • ChinHan
  • 2015年12月03日 09:27
  • 495

iOS 通知,代理,单例,block传值

1.单例设计模式 .h // // danli.h // test ipad // // Created by 黄权浩 on 14-12-24. // Copyright (c) 2014年 ...

iOS-OC-iOS传值大全(代理传值,block 传值,单例传值,通知传值,属性传值)

1、代理传值 有A \B 两个页面需要将B页面的值传个A 总结: 1.首先应该在b页面写一个协议,协议里有带参数的方法,并创建实现该协...

iOS 传值方法(属性传值、代理传值、Block、通知、单例)

iOS 传值方法(属性传值、代理传值、Block、通知、单例)
  • Cy_Lo
  • Cy_Lo
  • 2016年06月03日 17:25
  • 87

iOS 页面间几种传值方式(属性,代理,block,单例,通知)

第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值、block传值 那么第一个视图控制器如...
  • mrSunHR
  • mrSunHR
  • 2015年06月26日 11:19
  • 348
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:02-单例-通知-KVO-Block-代理
举报原因:
原因补充:

(最多只允许输入30个字)