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

Posted slgkaifa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KVO---视图间数据的传递:标签显示输入的内容多个视图中相关的知识,希望对你有一定的参考价值。

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;
    
}


以上是关于KVO---视图间数据的传递:标签显示输入的内容多个视图中的主要内容,如果未能解决你的问题,请参考以下文章

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

在视图控制器之间传递多个标签时遇到问题

Java多线程编程,怎样实现线程间数据的传递?

将标签数据从表视图传递到另一个视图控制器

(尚033)Vue_案例_slot(组件间的通信4:slot)

快速在标签查看的控制器之间传递数据?