iOS UITextField通过Block回调数据

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上。

发布了32 篇原创文章 · 获赞 8 · 访问量 9578
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览