博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS—收起虚拟键盘的各种方法
阅读量:5065 次
发布时间:2019-06-12

本文共 2672 字,大约阅读时间需要 8 分钟。

本文章转自—http://justcoding.iteye.com/blog/1476171

     使用虚拟键盘来输入资讯,是iOS的重要互动方式之一,虚拟键盘通常会自动出现在可以编辑的UITextField或是 UITextView 的编辑事件中,叫出键盘固然容易,但是要把它收起来,可就没有这么简单,之前在 一文中,介绍了如何在编辑完成之后收起虚拟键盘,但是如果您的元件并没有对应的事件可以让你收起虚拟键盘,那又该如何做?下列我们以类似的元件 UITextView 为例,介绍一些通用的方法。

1.点击编辑区以外的地方(UIView)

这是一种很直接的方法,当不再需要使用虚拟键盘的时候,只要点击虚拟键盘和编辑区域以外的地方,就可以将键盘收起,下面程式码是在UIView中内建的触碰事件方法函数。

 c代码

1 -(void)toucheEnded:(NSSet *)touches withEvent:(UIEvent *)event{2     if(![myTextView isExclusiveTouch]){3     [myTextView resignFirstResponder];  4     }  5 }

如果要使用此方式请务必记得,你操作画面的 Custom Class 一定是UIView才行。画面的Custom Class 为 UIView

2.点击编辑区域意外的地方(UIControl)

收起虚拟键盘的方式与前一种相同,但是如果你的触碰事件里已经且写满了程式码,那么就可以考虑使用,UIControl的Touch Up Inside 事件来收起键盘,方法是将以下程式码与UIcontrol的Touch Up Inside事件连结即可。

c代码

1 -(void)dismissKeyboard:(id)sender{2 3   [myTextView resignFirstResponder]; 4 5 }

如果要使用此方式,请务必记得,你操作画面的Custom Class 一定要是 UIControl 才行,将收起键盘的方法与UIControl事件连结

3.使用只做收起键盘的按钮

当没有编辑区域以外的地方可供点击来收起键盘,自己制作一个按钮来收起目前的虚拟键盘,也是一个不错的方法,由于按钮必须在虚拟键盘出现才能显示于画面上, 因此必须借用NSNotificationCenter 来帮助我们判断目前键盘的状态,您可以在一文中,找到更多关于 NSNotificationCenter 的资讯。

  首先在 viewDidLoad: 事件中,向 NSNotificationCenter 进行註册,告诉 NSNotificationCenter 我们的 doneButtonshow: 方法函式,想要订阅有关 UIKeyboardDidShowNotification 的讯息事件。

c代码

1 -(void)viewDidLoad{2   [super viewDidLoad];3 4   [NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doneButtonshow:) name: UIKeyboardDidShowNotification object:nil];  5 }

现在每当虚拟键盘出现时,就会自动呼叫我们自定义的doneButtonshow:方法函数,接下来只要在刚方法函数里定义按钮出现的方法即可。

c代码

1 -(void)doneButtonshow:(NSNotification *)notification2 {3  doneButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];4  doneButton.frame = CGRectMake(0,228,70,35);5  [doneButton setTitle:@"完成编辑" forState:UIControlStateNormal];6  [doneButton addTarget:self action:@selector(hideKeyboard)  forControlEvents:UIControlEventTouchUpInside];7  [self.view addSubview:doneButton];8 }

最后是实作按钮按下去时的hideKeyboard:方法函数,务必记得要在函数中移除该按钮。

c代码

1 -(void)hideKeyboard2 {3   [doneButton removeFromSuperview];4   [myTextView resignFirstResponder];5 }

4.使用判断段输入字元

如果要使用输入特定字元(例如return换行字元)来收起键盘,必须现在类别内的 @interface区段采用协定。

在采用协定之后,接着实作出协定内的textView:shouldChangeTextInRange:replacementText:方法,此方法函数会在字元输入时触发,而回传的BOOL值则代表该字元是否要作用,下列程式码就是在此方法函数中,使用判断输入字元的方法来收起虚拟键盘(判断字元为return换行字元).

c代码

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{   if ([text isEqualToString:@"\n"]){    [myTextView resignFirstResponder];    return NO;      }    return YES;}

最后别忘记在viewDidLoad:事件中,将UITextView的代理事件指向自己,这样程式才能正确找到实作协定方法函式的类别。

c代码

1 -(void)viewDidLoad2 {3   [super viewDidLoad];4   myTextView.delegate = self;5 }

 

转载于:https://www.cnblogs.com/xrkdjjtk/p/5176326.html

你可能感兴趣的文章
HDU1814 2-sat 模板
查看>>
IDEA连接数据库自动生成实体类
查看>>
linux 用户管理
查看>>
分享接口
查看>>
团队作业-Beta冲刺(周三)
查看>>
javascript有用小功能总结(未完待续)
查看>>
(Problem 3)Largest prime factor
查看>>
【SQL】表A多个字段,关联表B一个字段说明
查看>>
python网络编程
查看>>
单例双重加锁
查看>>
[翻译svg教程]svg中的circle元素
查看>>
HDU 1201 Fibonacci Again
查看>>
ASP.NET MVC视图和控制器之间的传值总结(一)
查看>>
敏捷与 DevOps:是敌是友?
查看>>
bzoj1588营业额统计
查看>>
概率与数学期望
查看>>
ARP(Address Resolution Protocol)地址解析协议初识
查看>>
js array 的理解
查看>>
自然数幂求和方法1:扰动法(求两次)
查看>>
SQL SERVER 中如何用脚本管理作业
查看>>