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]; } |
将来的自己,会感谢现在不放弃的自己!
标签:
iOS基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现