解决键盘老是不消失实现delegate委托实例化过程
第一步:
在你的textfield类中的.h文件中写入委托声明
#import <UIKit/UIKit.h>
@interface ViewController1:UIViewController<UITextFieldDelegate>
@end
第二步:然后再去你的.m文件中进行实现
//密码文本框
UITextField *passtext=[[UITextField alloc]initWithFrame:CGRectMake(50, 300, 180, 40)];
passtext.backgroundColor=[UIColor cyanColor];
passtext.clearButtonMode=UITextFieldViewModeWhileEditing;
passtext.borderStyle=UITextBorderStyleBezel;
passtext.secureTextEntry=YES;
passtext.placeholder=@"write passwords";
passtext.delegate=self;
[self.view addSubview:passtext];
首先在你的textfiled写入 (ViewDidLoad内)
passtext.delegate=self;
第三步:然后再在ViewDidLoad外写你的实现方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[text resignFirstResponder]; //主要是[receiver resignFirstResponder]在哪调用就能把receiver对应的键盘往下收
return YES;
}
就可以啦
然后再给大家附上
我先后用过4种方法,来处理键盘消失的问题。
1. 通过UITextFiledDelegate,来释放第一响应者 (resignFirstResponder); 这种通过delegate释放键盘的代码如下:
- (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES;}以下3种方法是通过 响应事件来处理的:
2. 通过 Done键的 DidonExit method,来 resignFirstResponder;
3. 点击编辑框的背景图,让键盘消失。 方法: 将背景view 设为: UIControll。 UIView本身不能响应事件,而UIcontroll 是可以响应事件的。 UIControll 继承于 UIView; 通过调用 UIControll的 Touch Down 事件,让键盘消失;
4. 放置一个 UIButton ,将这个UIButton 布满全屏,当点击非编辑区域时,其实就是点击这个巨型的Button。 在这个button 事件中, resignFirstResponder 即可。
- (IBAction)backgroundTap:(id)sender { [self.nameTextField resignFirstResponder]; [self.passwordTextField resignFirstResponder];}说明: 这个method 模拟了用户的两种行为: 1. 点击keyboard上的 done 键 ,让键盘消失; 2. 点击 编辑框以外的区域, 让键盘消失。特别说明一点: 通过布满全屏的Button ,这种方法要求: 这个巨型的Button 一定要放在最底层。 否则的话,编辑框将无法接受输入的事件。方案点评:UITextFieldDelegate 和 UIControll 方案,处理键盘消失问题,这是一种大智慧。 而巨型 Button 和 didOnExit 方法,虽然也能用,但从软件编程思想上看,只能算是一种小聪明罢了。 小结:只要有输入框存在,就得处理如何让键盘消失的问题。 当然,你可以仅仅处理 点击“done”按钮,来让键盘消失。 但为了让用户有更好的体验, 需要同时处理 非编辑框的区域的事件响应。
1.最简单粗暴的,只要在 任何 UIView子类结束编辑即可:
在一个VIewController收起键盘的方法如下:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view endEditing:YES];
}
2.释放编辑框TextField(TextView同理)的第一响应者即可,实现手段很多:
(1) TextField点击Reture收起键盘
步骤:实现委托协议,释放第一响应者
self.textField.delegate=self;
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[self.textField resignFirstResponder];
return YES;
}
(2)在ViewController的self.view上添加一个tap单击手势,当点击空白的时候,释放 输入框的第一响应者即可
(3)背景设置一个 UIButton,给button一个回调,当点击按钮的时候释放键盘的第一响应者即可,同上
1.最简单粗暴的,只要在 任何 UIView子类结束编辑即可:
在一个VIewController收起键盘的方法如下:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view endEditing:YES];
}
2.释放编辑框TextField(TextView同理)的第一响应者即可,实现手段很多:
(1) TextField点击Reture收起键盘
步骤:实现委托协议,释放第一响应者
self.textField.delegate=self;
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[self.textField resignFirstResponder];
return YES;
}
(2)在ViewController的self.view上添加一个tap单击手势,当点击空白的时候,释放 输入框的第一响应者即可
(3)背景设置一个 UIButton,给button一个回调,当点击按钮的时候释放键盘的第一响应者即可,同上
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
//返回一个BOOL值,指定是否循序文本字段开始编辑
return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
//开始编辑时触发,文本字段将成为first responder
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
//返回BOOL值,指定是否允许文本字段结束编辑,当编辑结束,文本字段会让出first responder
//要想在用户结束编辑时阻止文本字段消失,可以返回NO
//这对一些文本字段必须始终保持活跃状态的程序很有用,比如即时消息
return NO;
}
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
//当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。
//这对于想要加入撤销选项的应用程序特别有用
//可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。
//要防止文字被改变可以返回NO
//这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中
return YES;
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{
//返回一个BOOL值指明是否允许根据用户请求清除内容
//可以设置在特定条件下才允许清除内容
return YES;
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
//返回一个BOOL值,指明是否允许在按下回车键时结束编辑
//如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起
[textField resignFirstResponder];//查一下resign这个单词的意思就明白这个方法了
return YES;
}
转载于:https://www.cnblogs.com/zhuhengjie/p/5966954.html
解决键盘老是不消失实现delegate委托实例化过程相关推荐
- UITextField 文本字段控件 -- IOS (解决键盘遮住View及密文設定的问题)(实例)
进入本文之前建议你认真读一读我的另一篇博文:UIControl IOS控件编程 这样会起到事半功倍效果. 为什么要看另一篇关于UIControl的文章呢?因为UITextField继承自UIContr ...
- 仿QQ空间登录,解决键盘挡住输入框的问题
我们在开发Android应用中,登录和注册界面是少不了的,往往在做登录注册的时候如果给界面加一个LOGO,就有可能把用户名和密码框放在手机屏幕的中间或底部,这样当软键盘弹出的时候,就有可能挡住输入框( ...
- Delegate委托的使用
Delegate委托的使用 委托的说明 委托(delegate)是Cocoa的一个术语,表示将一个对象的部分功能转交给另一个对象. 比如对象A希望对象B知道将要发生或已经发生某件事情,对象A可以把对象 ...
- Strategy模式与Delegate委托
Strategy模式是对算法的封装.即使是一个计算行为,如果其实现有其多样性,为达到易扩展的目的,我们也有必要将其抽象出来,以接口的形式来定义.由于充分利用了面向对象的多态性,在调用该行为时,其具体的 ...
- linux操作系统重启后 解决nginx的pid消失问题
linux操作系统重启后 解决nginx的pid消失问题 参考文章: (1)linux操作系统重启后 解决nginx的pid消失问题 (2)https://www.cnblogs.com/cyq632 ...
- delegate委托
delegate委托: 三个概念: C# 中的委托类似于 C 或 C++ 中的函数指针. 委托是面向对象.类型安全的,并且是安全的. 委托和接口的类似之处是:它们都允许分隔规范和实现. 一个原则: 被 ...
- C# Delegate(委托)与多线程
C# Delegate(委托)与多线程 很多时候写windows程序都需要结合多线程,在.net中用如下得代码来创建并启动一个新的线程. public void ThreadProc(); ...
- 【C#学习】delegate(委托) 和 event(事件)
C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变.在C#中方法不能作为参数直接传递,必须 ...
- VC6解决托盘菜单不消失
CMenu menu; menu.LoadMenu(IDR_MNU_TRAY); // 2 CMenu* pMenu=menu.GetSubMenu(0); CPoint point; GetCurs ...
- 转:终于会用c#中的delegate(委托)和event(事件)了
第一个例子: public class DelegateTest {// 声明delegate对象 public delegate void CompareDelegate(int a,int b); ...
最新文章
- mysql填加序列号(仿照oracle row_number函数)
- 电费竟然占了数据中心运维总成本的7成?
- c#垂直投影法_投影学
- QT的QGraphicsItem类的使用
- CNN和RNN中如何引入BatchNorm
- 中service层的作用_浅析Java中dto、dao、service、controller的四层结构
- Can't locate Config.pm in @INC
- matlab输出n个a,输入a,n两个参数,要求输出aaa...a(共n个)的值
- Hive单用户模式搭建
- 数据福利|各种分辨率DEM数据下载
- 电风扇标准集合(BS/EN/IEC/UL) - 安规+性能
- 美著名电话飞客去世 可凭口哨打免费电话(图)
- python读取excel画散点图对应多个y_Python数据分析:折线图和散点图的绘制
- Bandizip下载安装教程
- 程序员高管修炼之道!
- VUE实现页面局部刷新
- 四百元左右有什么降噪耳机推荐?高性价比降噪耳机推荐
- 重庆大学计算机类专业分数线,重庆大学录取分数线 2019年重庆大学各专业录取分数线...
- SQL由入门到精通的学习
- 一定要做自己最内行的东西,一定要在自己本身的职位上来提升自己
热门文章
- 阿里Q3财报:阿里云连续第7个季度翻番
- rabbitMQ概念详细介绍
- Jupyter Notebook 作图显示中文
- 如何用vs2013开发人员命令提示工具执行一个方法(一个简单的demo)
- Linux 第12天: (08月19日) 练习和作业
- HDOJ-2602 Bone Collector [DP-01背包问题]
- mongodb 集群shard_MongoDB分片集群部署详解
- 群晖 上传 源文件不存在_群晖NAS配多大容量硬盘合适?
- 汽车理论课后习题matlab程序,汽车理论课后题matlab程序
- 某医院病房计算机管理数据库,毕业论文_数据库某医院病房计算机系统.doc