欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS UITextField通过Block回调数据

程序员文章站 2022-05-31 20:49:58
...

UITextField可以通过代理回调数据,也可以通过Block回调数据。 

//UIText.h
#import <UIKit/UIKit.h>
typedef void(^textShowDidFinished)(NSString * content);//类型重定义的block
@interface UIText : UIView<UITextFieldDelegate>//代理
@property (nonatomic,copy)textShowDidFinished block;
@property (nonatomic,strong)UITextField * textcon;
@end

//  UIText.m
#import "UIText.h"

@implementation UIText
-(instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self != nil) {
        self.textcon = [[UITextField alloc]initWithFrame:CGRectMake(40, 60, frame.size.width-80, 60)];
        self.textcon.borderStyle = UITextBorderStyleRoundedRect;
        [self addSubview:self.textcon];
        [self.textcon becomeFirstResponder];
        self.textcon.delegate = self;//一定要写,不然UITextField不会接收到数据
    }
    return self;
}
//通过这个方法实时监听UITextField上的内容的变化
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    NSString * str = [textField.text stringByReplacingCharactersInRange:range withString:string];
    NSLog(@"%@",str);
    self.block(str);
    return YES;
}
@end

 首先我们写了一个类,这个类继承于UITextField,然后我们重定义了一个block(一般操作),之后我们定义了重定义类型的block的一个属性变量,又定义了一个UITextField的一个属性变量。在实现文件中,我们重写了init方法,实现了协议中的textField: 方法,在实现的这个协议中的方法中,我们调用了block,并传递了一个参数,通过这个参数来实现数据的回调。

#import "ViewController.h"
#import "UIText.h"
@interface ViewController ()
@property (nonatomic,strong)UIText * text;
@property (nonatomic,strong)UILabel * label;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.text = [[UIText alloc]initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width,self.view.bounds.size.height)];
    self.label = [[UILabel alloc]initWithFrame:CGRectMake(40, 180, self.view.bounds.size.width-80, 60)];
    self.label.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:self.text];
    [self.view addSubview:self.label];
    
    
    __weak typeof(self) weakSelf = self;
    self.text.block = ^(NSString * content){
        weakSelf.label.text = content;
    };
    
}

@end

我们在主界面控制器的视图中添加了一个UILable和一个UITextField(UIText是自定义的继承于UITextField的子类),然后实现了在UITextfield中的block方法:将UITextField中的内容同步显示到UILbel上。

iOS UITextField通过Block回调数据