IOS学习笔记:视图之间传值的方法

来源:互联网 发布:康佳电视机软件下载 编辑:程序博客网 时间:2024/05/22 16:48

1.单例

static Content *content = nil;+ (Content *)shareContent{    if (content == nil) {        content = [[self alloc]init];    }    return content;}

//视图已经显示的时候调用的方法- (void)viewDidAppear:(BOOL)animated{    [super viewDidAppear:animated];        Content *content = [Content shareContent];    _textLabel.text = content.text;}

    //把textField的值存放到content对象里面    Content *content = [Content shareContent];    content.text = _textField.text;



2.通知

//移除通知    [[NSNotificationCenter defaultCenter]removeObserver:self name:kNotifName object:nil];  //注册通知        [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notificationAction:) name:kNotifName object:nil];//接受到通知的方法- (void)notificationAction:(NSNotification *)notification{    NSString *text = [notification.userInfo objectForKey:@"text"];    _textLabel.text = text;}
    NSDictionary *dic = @{@"text":_textField.text};    //发送通知    [[NSNotificationCenter defaultCenter] postNotificationName:kNotifName object:nil userInfo:dic];

3.代理

#import <Foundation/Foundation.h>@protocol UIViewPassValueDelegate <NSObject>- (void)passValue:(NSString *)value;@end

//实现协议,在第一个窗口显示在第二个窗口输入的值- (void)passValue:(NSString *)value {    _label.text = value;}//设置第二个窗口中的delegate为第一个窗口的self     contentVC.delegate = self;

//这里用assign而不用retain是为了防止引起循环引用。@property(nonatomic,assign) NSObject<UIViewPassValueDelegate> *delegate;//通过委托协议传值    [delegate passValue:_textField.text];

4.KVO

- (void)viewDidLoad{    [super viewDidLoad];    // Do any additional setup after loading the view from its nib.    [self _initViews];        //创建一个观察者    //创建(secondViewController)视图    _secondVC = [[SecondViewController alloc]init];        //添加观察者    /*        被观察者:            1.所要观察的属性是否存在。            2.这个属性的改变必须通用set方法去改变,或者kvc     */    [_secondVC addObserver:self forKeyPath:@"textField.text" options:NSKeyValueObservingOptionNew context:nil];    }#pragma mark - KVO- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    _textLabel.text = [change objectForKey:@"new"];}

//触发self.textField.text =  self.textField.text;


0 0
原创粉丝点击