文档章节

iOS --UITextField 输入值改变事件和键盘遮挡处理

指尖流年
 指尖流年
发布于 01/11 17:06
字数 321
阅读 95
收藏 0
点赞 0
评论 0

一.输入结束时调用

#pragma mark--UITextFieldDelegate--输入完成时调用
- (void)textFieldDidEndEditing:(UITextField *)textField
{
    if(![textField.text isEqualToString:@""]){
        
         //处理事件
    }
    
}


#pragma mark--UITextFieldDelegate---键盘回调
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
    
}

 二.输入时改变

1.添加事件

  [_textField addTarget:self
                   action:@selector(textFieldDidChangeValue:)
         forControlEvents:UIControlEventEditingChanged];



- (void)textFieldDidChangeValue:(id)sender
{
    if(![_textField.text isEqualToString:@""]){
        
        //处理事件
    }
}

2.添加通知监听

//添加通知   
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChangeValue:) name:UITextFieldTextDidChangeNotification object:_textField];


- (void)textFieldDidChangeValue:(NSNotification *)notification
{
    UITextField *textField = (UITextField *)[notification object];
    //处理事件
}


//移除注册的通知
-(void)dealloc
{
    
    [[NSNotificationCenter defaultCenter] removeObserver:self];
   
}

三.键盘遮挡问题

#define Main_Screen_Height      [[UIScreen mainScreen] bounds].size.height
#define Main_Screen_Width       [[UIScreen mainScreen] bounds].size.width

//键盘通知
- (void)registerForKeyboardNotifications {
    
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShown:)
                                                 name:UIKeyboardWillChangeFrameNotification object:nil];

}

//键盘弹出 处理遮挡问题
- (void)keyboardWillShown: (NSNotification *)notify {
    NSDictionary *dic = notify.userInfo;
//    CGFloat duration = [[dic objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
    NSValue *value = [dic objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGSize size = [value CGRectValue].size;
//获取键盘高度
    CGFloat keyBoardHeight = size.height;

    CGRect frame = _numField.frame;
    int offset = frame.origin.y + 300 - (Main_Screen_Height - keyBoardHeight);
    
    [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
    [UIView setAnimationDuration:0.3f];
    
    //将视图y坐标向上移动offset个单位,以使下面有地方显示键盘
    
    if(offset > 0){
        self.view.frame = CGRectMake(0.0f, -offset, Main_Screen_Width,Main_Screen_Height);
        self.view.backgroundColor = Sec_Search_Color;
    }
    [UIView commitAnimations];
     
}

#pragma mark--UITextFieldDelegate编辑完成,视图恢复原状
-(void)textFieldDidEndEditing:(UITextField *)textField
{
    self.view.frame =CGRectMake(0, 0, Main_Screen_Width, Main_Screen_Height);
}

四、修改textField.placeholder的字体颜色和大小

  [_searchBar.textField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];
    [_searchBar.textField setValue:[UIFont fontWithName:@"PingFangSC-Regular" size:14] forKeyPath:@"_placeholderLabel.font"];

 

© 著作权归作者所有

共有 人打赏支持
指尖流年
粉丝 6
博文 56
码字总数 25606
作品 0
海淀
iOS工程师
input 输入框被软键盘遮挡问题

1.安卓手机 在软键盘被弹起来的时候输入框不被遮挡,支持性良好 2.ios手机 在软键盘被弹起来的时候输入框被遮挡,体验很不好 在经过多次实验发现,ios手机输入框被弹起的瞬间是不被遮挡的,过...

爱喝水的小熊
06/06
0
0
修复ios不支持fixed属性

场景说明:产品需求在wap页面,需要在页面底部固定一块区域执行输入操作。在Android手机中,对position:fixed是完美支持并实现预计效果的,但ios系统手机测试时出现输入框光标不居中和底部区...

碌星
05/19
0
0
UIResponder 对象详解

在 iOS 中,一个 UIResponder 对象表示一个可以接收触摸屏上的触摸事件的对象,通俗一点的说,就是表示一个可以接收事件的对象。 iOS 中,所有显示在界面上的对象都是从 UIResponder 直接或间...

武宗涛
2012/10/16
0
0
Xamarin iOS教程之键盘的使用和设置

Xamarin iOS教程之键盘的使用和设置 Xamarin iOS使用键盘 在文本框和文本视图中可以看到,当用户在触摸这些视图后,就会弹出键盘。本节将主要讲解键盘的输入类型定义、显示键盘时改变输入视图...

大学霸
2015/06/19
0
0
iOS 实现输入框跟随键盘自动上移

场景还原 有些时候在包含输入框的页面中,点击输入框输入会因键盘弹起而遮挡住一部分输入框,影响用户体验。iOS在默认情况下并不会处理这种问题,不过我们可以自己实现键盘弹起输入框自动上移...

还是不够辣
2017/04/12
0
0
UITextField一些技巧总结

我们在项目中肯定要用到UITextField允许用户输入,比如在登录、注册界面。小小的TextField有必要专门出一篇教程吗?当然是有必要的,因为使用场景不同,所以就有了不同的需求,本篇博客结合自...

召唤攻城狮
2014/03/24
0
0
fixed定位元素被安卓、ios键盘顶起的解决办法

问题背景: 当我们在写H5页面时经常会有fixed固定位置的元素存在,例如下图左中的"作业帮一课APP下载框",当我们input输入的时候键盘会弹起并将fixed定位的下载框顶起,如下图右,ios和安卓部分机...

JamesView
07/07
0
0
常见的移动端H5页面开发遇到的坑和解决办法

手机共通问题 问题一:用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经研究发现是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页字会非常小,所以苹果...

webmirror
05/02
0
0
iO6 Programming pushing the limits 阅读笔记

目录 第一部分 iOS6新内容 第二部分 从每天工具中获取更多(介绍日常使用控件和框架的潜力) 第三部分 完成任务的正确工具(介绍不是那么常用的控件和框架) 第四部分 发挥到极限(深入理解i...

云飞扬v5
2015/11/09
0
0
iOS开发需要了解的基础内容链接整理

https://llvm.org/svn/llvm-project/cfe/trunk/test/SemaObjC/builtinobjcnslog.m http://llvm.org/klaus/clang/commit/5faf5d31fa634e1fdb576c4d9708cd4efa5ea310/ 对Objective-C的NSObjec......

智能小松鼠
2015/01/14
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

机器学习管理平台 MLFlow

最近工作很忙,博客一直都没有更新。抽时间给大家介绍一下Databrick开源的机器学习管理平台-MLFlow。 谈起Databrick,相信即使是不熟悉机器学习和大数据的工程湿们也都有所了解,它由Spark的...

naughty
今天
0
0
idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
13
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部