文档章节

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

指尖流年
 指尖流年
发布于 01/11 17:06
字数 321
阅读 129
收藏 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"];

 

© 著作权归作者所有

共有 人打赏支持
指尖流年
粉丝 9
博文 57
码字总数 26355
作品 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
fixed定位元素被安卓、ios键盘顶起的解决办法

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

JamesView
07/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
58分钟前
1
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
2
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
10
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
0
0
Coding and Paper Letter(四十)

资源整理。 1 Coding: 1.Tomislav Hengl撰写的非官方作者指南:Michael Gould•Wouter Gerritsma。 UnofficialGuide4Authors 2.R语言包rwrfhydro,社区贡献的工具箱,用于管理,分析和可视化...

胖胖雕
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部