iOS 开发之 - 关闭键盘 退出键盘 的5种方式

iOS 开发之 - 关闭键盘 退出键盘 的5种方式

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

2、点击编辑区域以外的地方(UIControl)

3、使用制作收起键盘的按钮

4、使用判断输入字元

5、关于键盘遮蔽的问题

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

这是一种很直觉的方法,当不再需要使用虚拟键盘时,只要点击虚拟键盘和编辑区域外的地方,就可以将键盘收起,下面程式码是在 UIView 中内建的触碰事件方法函式,您可以参考 Touch Panel / 触碰萤幕 / 压力感应器的基本使用方式一文,找到更多关于触碰事件的方法函式。

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
  if (![myTextView isExclusiveTouch]) {
    [myTextView resignFirstResponder];
  }
}

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

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

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

- (IBAction)dismissKeyboard:(id)sender {
  [myTextView resignFirstResponder];
}

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

画面的 Custom Class 为 UIControl

将收起键盘的方法与 UIControl 事件连结

 3. 使用制作收起键盘的按钮

当没有编辑区域以外的地方可供点击来收起键盘,自己制作一个按钮来收起目前的虚拟键盘,也是一个不错的方法,由于按钮必须在虚拟键盘出现才能显示于画面上,因此必须借用 NSNotificationCenter 来帮助我们判断目前键盘的状态。
首先在 viewDidLoad: 事件中,向 NSNotificationCenter 进行註册,告诉 NSNotificationCenter 我们的 doneButtonshow: 方法函式。

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

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

-(void) doneButtonshow: (NSNotification *)notification {
  doneButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
  doneButton.frame = CGRectMake(0, 228, 70, 35);
  [doneButton setTitle:@"完成编辑" forState: UIControlStateNormal];
  [doneButton addTarget: self action:@selector(hideKeyboard) forControlEvents: UIControlEventTouchUpInside]; 

  [self.view addSubview:doneButton];
}

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

-(void) hideKeyboard {
  [doneButton removeFromSuperview];
  [myTextView resignFirstResponder];
}

4. 使用判断输入字元

如果要使用输入特定字元(例如 return 换行字元)来收起键盘,必须先在类别内的 @interface 区段採用  协定,您可以参考 Protocol 协定的使用方式一文,获得更多关于协定的资讯。

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

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

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

- (void)viewDidLoad {
  [super viewDidLoad];
  myTextView.delegate = self;
}

5. 关于键盘遮蔽的问题

如果您在实作上有遭遇到键盘遮蔽编辑区域的问题,可以参考使用 Animation 解决小键盘挡住 UITextField 的问题一文,透过 Core Graphic 的 Animation 功能,在键盘出现时同时移动编辑区域来解决遮蔽的问题。

以上就是对IOS关闭键盘 退出键盘 5种方式的资料整理,谢谢大家对本站的支持!

(0)

相关推荐

  • IOS开发代码分享之用nstimer实现倒计时功能

    用nstimer实现倒计时功能,废话不多说,直接上代码,详细解释请参照注释 // [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];   // - (void)timerFireMethod:(NSTimer *)theTimer {     BOOL timeStart = YES;     NSCalend

  • iOS开发之路--仿网易抽屉效果

    最终效果图: MainStoryBoard示意图: BeyondViewController.h // // BeyondViewController.h // 19_抽屉效果_仿网易 // // Created by beyond on 14-8-1. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <UIKit/UIKit.h> #import "LeftTableViewControllerD

  • 如何用IOS调用WebService(SOAP接口)

    在一次项目开发过程中,用到IOS调用WebService接口,所以抽个空把这方面的内容给大家整理出来,分享给大家. 方法一:使用WSDL2ObjC工具,将接口转成OC类. 1.在浏览器中输入webService接口地址(Safari不可用,我用的是Firefox),如:http://xxx.xxx.asmx, 地址后面添加上.wsdl成http://xxx.xxx.asmx.wsdl打开. 2.将页面另存为wsdl文件,保存的时候后缀加上.wsdl,保存成如xxxxService.asmx.xm

  • iOS毛玻璃效果的实现及图片模糊效果的三种方法

    App设计时往往会用到一些模糊效果或者毛玻璃效果,iOS目前已提供一些模糊API可以让我们方便是使用. 话说苹果在iOS7.0之后,很多系统界面都使用了毛玻璃效果,增加了界面的美观性,比如下图的通知中心界面; 但是其iOS7.0的SDK并没有提供给开发者实现毛玻璃效果的API,所以很多人都是通过一些别人封装的框架来实现,后面我也会讲到一个; 其实在iOS7.0(包括)之前还是有系统的类可以实现毛玻璃效果的, 就是 UIToolbar这个类,并且使用相当简单,几行代码就可以搞定. 下面是代码实现:

  • iOS开发中实现显示gif图片的方法

    我们知道Gif是由一阵阵画面组成的,而且每一帧画面播放的时常可能会不相等,观察上面两个例子,发现他们都没有对Gif中每一帧的显示时常做处理,这样的结果就是整个Gif中每一帧画面都是以固定的速度向前播放,很显然这并不总会符合需求.   于是自己写一个解析Gif的工具类,解决每一帧画面并遵循每一帧所对应的显示时间进行播放.   程序的思路如下:   1.首先使用ImageIO库中的CGImageSource家在Gif文件.   2.通过CGImageSource获取到Gif文件中的总的帧数,以及每一

  • Windows下修改Bios,安装惠普 HP OEM XP [图文教程]

    为什么偏偏要装HP的XP呢,嘿嘿,HP的SP2是目前已知的最小的系统恢复光盘,只有497M.相当于半个精简版系统了.我一直用03,偶尔用XP时也是用联想的.可近日换了机器,用了联想锋行8000A的机器,装联想XP总是一卡一卡的,很是郁闷,于是决定试试HP的XP,用了之后感觉很好.没有卡的问题,心情很爽快,好东西不敢独享于是写了这个图文教程.希望朋友们能常来<系统之家>多多支持我.谢谢~! 很多网站以前早已做过介绍修改BIOS,安装HP OEM Windows XP,但几乎都是基于DOS环境下的

  • iOS微信第三方登录实现

    一.接入微信第三方登录准备工作. 移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的移动应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程.(注意) 1.下载iOS微信SDK. 下载地址 2.将SDK放到工程目录中. 3.补充导入一些依赖框架. 4.添加URL Types 5.添加iOS9 URL Schemes. 注意:如

  • asp.net 通过UserAgent判断智能设备(Android,IOS)

    最近一直在升级公司的手机站点,出了个触屏版专用的,做好后,就尝试通过 Agent 来判断相应的智能手机设备,然后跳转到新的手机站点经过不懈的努力,终于搜集了比较全的 智能设备 的 Agent,然后又写了程序,直接上代码吧 ,希望能帮助到你 复制代码 代码如下: /// <summary> /// 根据 Agent 判断是否是智能手机 /// </summary> /// <returns></returns> public static bool Check

  • IOS获取各种文件目录路径的方法

    iphone沙箱模型有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory()), 手动保存的文件在documents文件里 Nsuserdefaults保存的文件在tmp文件夹里 1.Documents 目录:您应该将所有de应用程序数据文件写入到这个目录下.这个目录用于存储用户数据或其它应该定期备份的信息. 2.AppName.app 目录:这是应用程序的程序包目录,包

  • iOS 开发之 - 关闭键盘 退出键盘 的5种方式

    iOS 开发之 - 关闭键盘 退出键盘 的5种方式  1.点击编辑区以外的地方(UIView) 2.点击编辑区域以外的地方(UIControl) 3.使用制作收起键盘的按钮 4.使用判断输入字元 5.关于键盘遮蔽的问题 1,点击编辑区以外的地方(UIView) 这是一种很直觉的方法,当不再需要使用虚拟键盘时,只要点击虚拟键盘和编辑区域外的地方,就可以将键盘收起,下面程式码是在 UIView 中内建的触碰事件方法函式,您可以参考 Touch Panel / 触碰萤幕 / 压力感应器的基本使用方式一

  • Android开发实现NFC刷卡读取的两种方式

    场景:NFC是目前Android手机一个主流的配置硬件项,本文主要讲解一下Android开发中,NFC刷卡的两种实现方式以及相关方法源码解析. ①:Manifest注册方式:这种方式主要是在Manifest文件对应的activity下,配置过滤器,以响应不同类型NFC  Action.使用这种方式,在刷卡时,如果手机中有多个应用都存在该NFC实现方案,系统会弹出能响应NFC事件的应用列表供用户选择,用户需要点击目标应用来响应本次NFC刷卡事件.目前我公司这边项目中使用了该逻辑,比较简便,这里先贴

  • Java web开发中加载图片路径的两种方式

    (1)   src="/image/1_it.jpg" (2)   src="http://localhost:8080/image/1_it.jpg" 其中localhost可以换位你的电脑IP,端口号也要相应改变. 以上均在基于编译器idea以及tomcat服务器开发的web中测试可行!都是要先定位到项目的位置! 以上所述是小编给大家介绍的Java web开发加载图片路径的两种方式,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

  • 总结IOS关闭键盘/退出键盘的五种方式

    话不多说,接下来就是几种实现方式: 1,点击编辑区以外的地方(UIView) 这是一种很直觉的方法,当不再需要使用虚拟键盘时,只要点击虚拟键盘和编辑区域外的地方,就可以将键盘收起,下面程式码是在 UIView 中内建的触碰事件方法函式,您可以参考 Touch Panel / 触碰萤幕 / 压力感应器的基本使用方式一文,找到更多关于触碰事件的方法函式. – (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { if (![

  • js关闭当前页面(窗口)的几种方式总结

    1. 不带任何提示关闭窗口的js代码 复制代码 代码如下: <a href="javascript:window.opener=null;window.open('','_self');window.close();">关闭</a> 2.自定义提示关闭 复制代码 代码如下: <script language="javascript">// 这个脚本是 ie6和ie7 通用的脚本function custom_close(){if

  • Android开发准确获取手机IP地址的两种方式

    最近看了好多网上获取IP地址的例子,发现好多都不完全准确,这里我写一下获取ip地址的两种方式. 比如微信支付,后台在做接口的时候,要求App端传入IP地址,我们需要判断是网络环境,WI-FI还是3G,所以需要获取这两种环境的ip地址. 第一步:首先是判断网络环境: String ip; ConnectivityManager conMann = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); N

  • iOS开发中AVPlayer的简单应用

    前言 在iOS开发中,播放视频通常有两种方式,一种是使用MPMoviePlayerController(需要导入MediaPlayer.Framework),还有一种是使用AVPlayer.关于这两个类的区别简而言之就是MPMoviePlayerController使用更简单,功能不如AVPlayer强大,而AVPlayer使用稍微麻烦点,不过功能更加强大.下面这篇文章主要介绍下AVPlayer的简单应用,需要的朋友们一起来看看吧. AVPlayer的简单应用 1.引入系统框架 2.创建视频的u

  • iOS开发教程之UIView和UIViewController的生命周期详解

    前言 iOS开发中,创建View常见的两种方式一个是纯代码,一个是借助于XIB:创建ViewController常见的也有两种方式一个是纯代码,一个是借助于StoryBoard. 通过交流我发现很多童鞋对这些概念都很模糊,于是通过实验写一篇博客供参考. 重写View的如下方法 @implementation YFView -(instancetype)init{ self = [super init]; NSLog(@"%s", __func__); return self; } -(

  • iOS开发笔记之键盘、静态库、动画和Crash定位

    前言 本文主要分享了开发中遇到的问题,和相关的一些思考.分享出来给有需要的朋友们参考学习,下面话不多说了,来一起看看详细的介绍吧. iOS11键盘问题 功能背景: 弹出键盘时,如果有输入框的话,需要输入框的位置跟随键盘大小而变动. 问题描述: 当快速切换键盘之后,容易出现输入框的位置没有紧贴键盘,如下:(以简书键盘为例) 相关实现: 输入框监听系统的UIKeyboardWillShowNotification和UIKeyboardWillHideNotification事件,在回调的过程中用UI

  • 比较IOS开发中常用视图的四种切换方式

    在iOS开发中,比较常用的切换视图的方式主要有以下几种: 1. push.pop 使用举例(ViewController假设为需要跳转的控制器): [self.navigationController pushViewController:ViewController animated:YES]; //入栈,跳转到指定控制器视图 [self.navigationController popViewControllerAnimated:YES]; //弹栈,返回到前一个视图 [self.navig

随机推荐