iOS基础 --- 如何监听一个控件(UITextField篇)

本文详细介绍了在iOS开发中,如何通过不同的方式来监听UITextField的状态变化,包括使用addTarget方法、NSNotification通知、代理模式以及重写系统方法等四种常用手段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里我用UITextField作演示,监听一个类时首先考虑的是自定义它,然后整体监听它。

一、addTarget。(凡是继承于UIControl都可以使用addTarget)

//添加监听
    [self addTarget:self action:@selector(startEdit) forControlEvents:UIControlEventEditingDidBegin];
    [self addTarget:self action:@selector(endEdit) forControlEvents:UIControlEventEditingDidEnd];
//实现监听
- (void)startEdit{
    NSLog(@"%s",__func__);
    self.placeholderColor = [UIColor redColor];
}
- (void)endEdit{
    NSLog(@"%s",__func__);
    self.placeholderColor = [UIColor grayColor];
}
//个人感觉比通知简单点

 二、通知

//开始编辑
   [[NSNotificationCenter defaultCenter]  addObserver: self selector:@selector(startEdit:) name:UITextFieldTextDidBeginEditingNotification object:self];
//完成编辑
    [[NSNotificationCenter defaultCenter]  addObserver: self selector:@selector(endEdit:) name:UITextFieldTextDidEndEditingNotification object:self];
//实现监听的方法
- (void)startEdit:(NSNotification *)noti{
    NSLog(@"%s",__func__);
    self.placeholderColor = [UIColor redColor]; //这里的placeholderColor是自定义封装的属性,目的是设置占位符的颜色
}
- (void)endEdit:(NSNotification *)noti{
    NSLog(@"%s",__func__);
    self.placeholderColor = [UIColor grayColor]; 
}
//删除通知

- (void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

三、代理

//使用代理在这里有个弊端,当外面再设置为这个textField为代理时,会不起作用,或者是这里代码不再起作用
,珍惜生命,谨慎使用。

self.delegate = self;
//实现代理的方法
#pragma mark ---UITextFieldDelegate
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    return  YES; //是否允许编辑
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
    //开始编辑
    self.placeholderColor = [UIColor redColor];
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
    //是否结束允许编辑
    return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField{
    self.placeholderColor = nil;
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    return YES; //是否可以改变文字
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{
    //是否可以清除
    return NO;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    //是否可以返回
    return YES;

四、系统的一些方法

//如果你完全了解一个控件,完全可以使用这个方法,好简单有木有
- (BOOL)becomeFirstResponder{
    self.placeholderColor = [UIColor whiteColor]; //当得到焦点时设置成白色
    return [super becomeFirstResponder];  //这里让系统父类正常返回
}
- (BOOL)resignFirstResponder{
    self.placeholderColor = nil;
  return   [super resignFirstResponder];
}

 

转载于:https://www.cnblogs.com/TheYouth/p/6528955.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值