解决的问题:当你点击一个UITextfield时,不想让其弹出键盘,如果你觉得不就是取消其第一响应者嘛,resignRespond一下不就行了嘛,确实,如果你只是在其编辑完成后让其键盘消失,那这个就够了,但是如果你想在编辑前让其消失呢?阐述下自己遇到的情况先:就是需要做一个地区的输入框(是一个UITextfield),但可以分自动获取和手动输入,当你第一次点击时,需要弹出block让你选择你输入类型,点击的实现是在UITextfield上添加addTarget一个UIControlEventEditingDidBegin类型监听。当然,接下来的操作是如果你直接点击编辑框是没有问题的,但是如果你点击了另外一个UITextfield后,已经弹出了键盘(ios中连续点击的是两个UITextfield控件,键盘是不会消失的,所以你也不会看到切换输入框时键盘连续弹入弹出),此时你若直接点击地区那个输入框,那么你的问题就来了,此时的键盘并不会消失,一种可能是你的弹出UI覆盖在键盘上面或者你的弹出UI被键盘覆盖。

解决方法:为了更好了了解解决的整个思路,同时避免被网上各种无厘头答案所误导,先来看下所需要了解的相关知识。

  UITextfield上的相关方法属性:

    enable:这是个继承自UIControl的属性,默认是YES,注释是 if NO, ignores touch events and subclasses may draw differently,也就是说当你设置为NO时,你添加的所有监听事件和在上面添加的属性都会失效。

    editing:这是自带的属性,注释是A Boolean value indicating whether the text field is currently in edit mode,也就是YES和NO对应着上面的输入指示焦点。

    addTarget上的4个点击监听类型,

         UIControlEventEditingDidBegin:当文本控件中开始编辑时发送通知。

       UIControlEventEditingChanged:当控件的值发生改变时,发送通知

       UIControlEventEditingDidEnd : 当文本控件中编辑结束时发送通知。

       UIControlEventEditingDidEndOnExit:当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。

如果你想对上面几个点击事件进行监听,你可以去实现UITextfieldDelegate的相应方法。

  下面进入解决:

    这个也可以分几种情况:

      1.你的页面所有的UITextfield都需要在点击时消除掉键盘先的话,你可以直接用UITextfield的addTarget方法监听,代码如下:

        [_mainView.sexInfoView.tailTextField addTarget:self action:@selector(setSex:) forControlEvents:UIControlEventEditingDidBegin];

      同时,你实现代理方法

        - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{

            //    此处加入你想要执行的代码

        return  NO;

        }

        2.你的页面只有部分UITextfield需要,那么,此时你就不能通过UITextfield的监听方法了,那么你可以怎么做呢?你可以直接把监听事件改用gesture的监听就行了嘛,具体代码如下:

      UITapGestureRecognizer *sexTap=[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(setSex:)];

     [_mainView.sexInfoView.tailTextFieldaddGestureRecognizer:sexTap];

总结:或许,看到最后你觉得其实也挺简单的嘛,可是如果你上网搜下,你就会发现这个问题困扰了很多人,而且很多的答案误导。。关于文中提到的UIControl,想要了解的话可以看下往期的博客,想要更加了解直接前往ios官网。

关于UITextfield弹出键盘解决方案的更多相关文章

  1. UITableView中cell里的UITextField不被弹出键盘挡住

    UITableView中cell里的UITextField不被弹出键盘挡住 本人视频教程系类   iOS中CALayer的使用 效果如下: 源码: EditCell.h 与 EditCell.m // ...

  2. IOS开发之自定义系统弹出键盘上方的view(转载)

    这篇文章解决的一个开发中的实际问题就是:当弹出键盘时,自定义键盘上方的view.目前就我的经验来看,有两种解决方法.一个就是利用UITextField或者UITextView的inputAccesso ...

  3. UI弹出键盘和收回键盘

    点击textfield,会自动弹出键盘 要让键盘收回来,先设置个代理:[field setTextFieldDelegate:self];  可设置成自己,也可设置成其他对象,只要在对应的类中,遵循U ...

  4. (Vue)移动端点击输入框,弹出键盘,底部被顶起问题

    (Vue)移动端点击输入框,弹出键盘,底部被顶起问题:https://www.jianshu.com/p/210fbc846544 问题描述:Vue开发中,当我们相对于父视图的底部布局子控件时,需要用 ...

  5. [调整] Firemonkey TEdit 避免按下立即弹出键盘的问题

    目前 Firemonkey 有一个问题,就是在 Edit 按下会立即弹出键盘,在红鱼儿的博客也提交了 QC: http://blog.sina.com.cn/s/blog_44fa172f0102vy ...

  6. 【小贴士】zepto find元素以及ios弹出键盘可能让你很头疼

    前言 在此,我不得不说移动端的兼容问题很多,并且很令人头疼,这不,这个星期又有两个让我逮着了,一个是使用zepto过程中出现的问题,一个是ios虚拟键盘的问题 我这里做一次记录,以免以后忘了,同时希望 ...

  7. 关于Android中EditText自动获取焦点并弹出键盘的相关设置

    在android开发中,关于EditText自动获取焦点弹出键盘,我们可能又是会有让键盘自动弹出的需求,有时可能又会有不想让键盘自动弹出的需求,下面是我所总结的两种方法: 需求:EditText自动获 ...

  8. fullpage插件在移动端弹出键盘页面特殊处理

    fullpage插件大家都很熟悉 jquery一款全屏上下滑动的插件. 最近做公司一个活动移动端使用fullpage插件填写input的时候遇见一个问题,手机自带的键盘弹出的时候会把页面顶出去,页面错 ...

  9. EditText: EditText自动获取焦点并弹出键盘&EditText不自动获取焦点并且不会弹出键盘

    1.EditText不自动获取焦点并且不会弹出键盘 找到EditText的父控件,设置其父控件为: Parent.setFocusable(true); Parent.setFocusableInTo ...

随机推荐

  1. Nuget介绍及使用技巧

    一.介绍 什么是Nuget? 引用自Nuget网站的原话“NuGet is the package manager for the Microsoft development platform inc ...

  2. javascript 中的location.pathname

    1 location.pathname; 这在之前我没怎么注意过,所以研究研究.location.pathname:返回URL的域名(域名IP)后的部分.例如 http://www.joymood.c ...

  3. Meteor入门

    转载Meteor入门介绍   Meteor是什么 基于nodejs的实时web APP开发框架. Meteor能带来什么 简单的说,你可以用js搞定客户端.服务端的开发.另外,客户端.服务端的界限被极 ...

  4. css3简单几步画一个乾坤图

    原文:[原创]css3简单几步画一个乾坤图 效果如上,鼠标移上去会有动画. 代码如下非常简单: <html> <head> <style> .outer{heigh ...

  5. javascript系列之核心知识点(一)

    JavaScript. The core. 1.对象 2.原型链 3.构造函数 4.执行上下文堆栈 5.执行上下文 6.变量对象 7.活动对象 8.作用域链 9.闭包 10.this值 11.总结 这 ...

  6. timesten备份和恢复

    ttIsql "DSN=ttwind;UID=cacheuser;PWD=cacheuser;OraclePWD=cacheuser;" --1.查看当前版本号 Command&g ...

  7. Socket 学习(三).1 tcp 通讯

    实现了,局域网客户端 对客户端 的通讯. 实际上这是 一个 客户端 兼 服务端 . 2个阿里云服务器测试 效果图: 本地效果图: using System; using System.Collecti ...

  8. 批处理命令篇--配置免安装mysql 5.6.22, 以及1067错误的一个解决方法

    mysql 服务启动出现1067错误的一个解决方法: 当服务启动出现1067错误时,可查看“windows 事件查看器”,发现类似错误提示 Can't find messagefile 'F:\    ...

  9. ubuntu忘记密码,无法sudo的解决方法

    想要安装一个sublime Text Editor,发现需要root权限,而且sudo用户的密码输进去没有作用!@ubuntu 14.04 LTS 这个时候怎么办呢? 打开终端,在终端中使用 sudo ...

  10. 终于有人把O2O、C2C、B2B、B2C的区别讲透了!

    终于有人把O2O.C2C.B2B.B2C的区别讲透了! 一.O2O.C2C.B2B.B2C的区别在哪里? O2O是online to offline分为四种运营模式: 1.online to offl ...