KVO---视图间数据的传递:标签显示输入的内容【多个视图中】

来源:互联网 发布:房地产大数据公司排名 编辑:程序博客网 时间:2024/04/29 22:37

RootViewController.m

#import "ModalViewController.h"@interface RootViewController ()@end@implementation RootViewController {    ModalViewController *modalCtrl;    }- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization    }    return self;}- (void)viewDidLoad{    [super viewDidLoad];    self.view.backgroundColor = [UIColor redColor];        UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 20)];    textLabel.tag = 100;    textLabel.backgroundColor = [UIColor orangeColor];    [self.view addSubview:textLabel];            UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];    button.frame = CGRectMake(50, 150, 100, 30);    [button setTitle:@"打开" forState:UIControlStateNormal];    [button addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];    [self.view addSubview:button];            modalCtrl = [[ModalViewController alloc] init];        //监听modal控制器的text属性    [modalCtrl addObserver:self forKeyPath:@"text"                   options:NSKeyValueObservingOptionNew                   context:NULL];    }//KVO触发方法- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {    if ([keyPath isEqualToString:@"text"]) {                NSString *text = [change objectForKey:@"new"];        UILabel *label = (UILabel *)[self.view viewWithTag:100];        label.text = text;            }    }- (void)buttonAction{    [self presentViewController:modalCtrl animated:YES completion:NULL];    }
ModalViewController.m
@interface ModalViewController (){    NSString *_text;}@end@implementation ModalViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization    }    return self;}- (void)viewDidLoad{    [super viewDidLoad];    self.view.backgroundColor = [UIColor greenColor];        UITextField *textFiled = [[UITextField alloc] initWithFrame:CGRectMake(50, 60, 160, 30)];    textFiled.tag = 100;    textFiled.delegate = self;    textFiled.borderStyle = UITextBorderStyleRoundedRect;    [self.view addSubview:textFiled];    //显示键盘    [textFiled becomeFirstResponder];        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];    button.frame = CGRectMake(50, 150, 100, 30);    [button setTitle:@"返回" forState:UIControlStateNormal];    [button addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];    [self.view addSubview:button];    }//按钮点击事件- (void)buttonAction{    [self dismissViewControllerAnimated:YES completion:NULL];    //    UITextField *field = (UITextField *)[self.view viewWithTag:100];//    NSString *text = field.text;    //    self.text = text;    }#pragma UITextField delegate//点击return调用的协议方法- (BOOL)textFieldShouldReturn:(UITextField *)textField {    //收起键盘    [textField resignFirstResponder];        return YES;    }- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {    NSLog(@"string:%@",string);//    string 是正在输入的最后一个字符        NSLog(@"%@",textField.text);//    textField.text 是输入的内容的前段字符(最后一个字符不包括)//    UITextField *field = (UITextField *)[self.view viewWithTag:100];//    NSString *text = field.text;    NSString *str = [NSString stringWithFormat:@"%@%@",textField.text,string];    NSLog(@"str:%@",str);    self.text = str;        return YES;    }


0 0
原创粉丝点击