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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
//添加监听
    [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];
}
//个人感觉比通知简单点

 二、通知

1
2
3
4
//开始编辑
   [[NSNotificationCenter defaultCenter]  addObserver: self selector:@selector(startEdit:) name:UITextFieldTextDidBeginEditingNotification object:self];
//完成编辑
    [[NSNotificationCenter defaultCenter]  addObserver: self selector:@selector(endEdit:) name:UITextFieldTextDidEndEditingNotification object:self];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//实现监听的方法
- (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];
}

三、代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//使用代理在这里有个弊端,当外面再设置为这个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;

四、系统的一些方法

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

 

posted @   TheYouth  阅读(485)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示