文本输入框UITextField和UITextView
本文概要
1.简介
2.介绍TextField控件
3.介绍TextView控件
4.键盘的打开和关闭
5.关闭和大开键盘的通知
6.键盘的种类
详情
1.简介
与Label一样,TextField和TextView也是文本类控件,是可以编辑文本内容的。但是TextField和TextView比Label多了一个键盘的使用,另外TextField和Textview还各自有一个委托协议。通过学习一下内容,可以使得在TextField和TextView进入编辑状态时,键盘会从屏幕下方滑出来,点击return键可以关闭键盘。
2.介绍TextField控件
在UIKit框架中,TextField控件由UITextField类创建。此外,它还有对应的UITextFieldDelegate委托协议。委托可以帮助响应事件。TextField继承了UIControl,隶属于真正的“控件”,而TextView继承了UIScrollView。设置placeholder属性可以作为提示,比如textField.placeholder = @"请输入姓名";运行时该提示文本是浅灰色,当有输入动作时该文本消失。设置clearButtonMode属性可以确定TextField后面的清楚按钮的显示时机。比如myTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
3.介绍TextView控件
TextView是一个可展示和编辑多行文本的控件,由UITextView类创建。它也有对应的UITextViewDelegate委托协议,我们可以借助委托来响应事件。
4.键盘的打开和关闭
一旦TextField和TextView等控件处于编辑状态,系统就会智能地弹出键盘,而不需要做任何额外的操作。但是关闭键盘就不像大开键盘这样顺利了,我们需要用代码去实现。
首先,我们要了解键盘不能自动关闭的原因。当TextField或者TextView处于编辑状态时,这些控件就会变成“第一响应者”。要想关闭键盘,就要放弃“第一响应者”的身份。在iOS中,事件沿着响应者链从一个响应者传到下一个响应者,如果其中一个响应者没有对事件做出响应,那么该事件会重新向下传递。
顾名思义,“第一响应者”是响应者链中的第一个,不同的控件成为“第一响应者”之后的“表现”不太一致。TextField和TextView等输入类型的控件会出现键盘,而我们只有让这些控件放弃它们的“第一响应者”身份,键盘才会关闭。为了实现,需要调用UIResponder类的resignFirstResponder方法,此方法一般在点击键盘的return键或者背景视图时调用。想要实现点击键盘的return键,调用这个方法,我们一般是放在它们各自的委托协议中去实现:
#pragma mark -UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
} #pragma mark -UITextViewDelegate
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([text isEqualToString:@"\n"]) {
[textView resignFirstResponder];
return NO;
}
return YES;
}
想要实现点击背景视图时,调用这个方法,使用view的touchesBegan:触摸事件来实现对键盘的隐藏,当点击view的区域就会触发这个事件:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
[self.view endEditing:YES];
}
另外,如果界面中有很多控件,或者控件的位置比较靠近屏幕下方,控件就很可能会被弹出的键盘挡住,此时可以添加UIScrollView控件来解决。
5.关闭和打开键盘的通知
在关闭和打开键盘时,iOS系统分别会发出如下广播通知:UIKeyboardDidHideNotification(关闭时)和UIKeyboardDidShowNotification(打开时)。
使用广播通知时,需要注意在合适的时机注册和解除通知,下边的举例在ViewController中分别在viewWillAppear:方法中注册通知,在viewWillDisappear:方法中解除通知。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated]; //注册键盘出现通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; //注册键盘隐藏通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
} - (void)viewWillDisappear:(BOOL)animated
{
//解除键盘出现通知
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil]; //解除键盘隐藏通知
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
} - (void)keyboardDidShow: (NSNotification *)notif
{
NSLog(@"键盘打开");
} - (void)keyboardDidHide: (NSNotification *)notif
{
NSLog(@"键盘隐藏");
}
6.键盘的种类
有输入动作的控件有三个属性用来设置与键盘相关的属性。比如系统提供了11种类型的键盘,选择不同的键盘类型,会在iOS上弹出不同的键盘。而且可以设置return键的文本,如果控件内输入的是查询条件,我们可以将return键的文本设置为Go或者search,示意接下来进行的就是查找动作。最后可以设置键盘的外观。需要说明的是,这些设置是具体到某个有输入动作的控件而言的。代码举例如下:
//设置键盘的类型(枚举值)
myTextField.keyboardType = UIKeyboardTypeDefault; //设置键盘的Return键的文本(枚举值)
myTextField.returnKeyType =UIReturnKeyDone; //设置键盘的外观(枚举值)
myTextField.keyboardAppearance=UIKeyboardAppearanceDark;
文本输入框UITextField和UITextView的更多相关文章
- Swift - 文本输入框(UITextField)
1,文本框的创建,有如下几个样式: UITextBorderStyle.none:无边框 UITextBorderStyle.line:直线边框 UITextBorderStyle.roundedRe ...
- iOS开发之自定义输入框(利用UITextField及UITextView)
drawRect的工作原理:首先苹果是不推荐我们直接使用drawRect进行工作的,直接调用他也是没有任何效果的.苹果要求我们调用UIView类中的setNeedsDisplay方法,则程序会自动调用 ...
- ios中实现对UItextField,UITextView等输入框的字数限制
本文转载至 http://blog.sina.com.cn/s/blog_9bf272cf01013lsd.html 2011-10-05 16:48 533人阅读 评论(0) 收藏 举报 1. ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- iOS:文本视图控件UITextView的详细使用
文本视图控件:UITextView 介绍:它是一个文本域的编辑视图,可以在该区域上进行编辑(包括删除.剪贴.复制.修改等),它与文本框UITextField的不同之处是:当它里面的每一行内容超出时,可 ...
- Text input(文本输入框)
Text input(文本输入框)是用来获得用户输入的绝佳方式. 你可以用如下方法创建: <input type="text"> 注意,input元素是自关闭的.
- Android文本输入框(EditText)切换密码的显示与隐藏
package cc.c; import android.app.Activity; import android.os.Bundle; import android.text.Selection; ...
- JS 文本输入框放大镜效果
JS 文本输入框放大镜效果 今天下午研究了下 "文本输入框放大镜效果" 当然KISSY官网也有这种组件 请看kissy demo 其实这种效果 对于很多童鞋来说 应该并不陌生!我今 ...
- HTML中<input>參数,以及文本输入框,文本域的解说
<form> <input type="text/password" name="名称" value="文本" /> ...
随机推荐
- bugku web4
打开打开,刚刚有个sb问我借lol号玩,浪费时间 继续干正事 随便输入后,提示 再好好看看... 出题人语文肯定不好 ,,,应该是这个 ‘再’ 吧 那我们查看源码 将那么明显的两行 进行 ...
- v:bind指令对于传boolean值的注意之处
1,
- MySQL 避免使用字符串类型作为标识列
避免使用字符串类型作为标识列: 消耗空间. 比数字类型慢(MyISAM 中对字符串使用压缩索引,查询会慢). 对于 MD5().UUID() 生成的随机字符串,这些值会分布在很大的空间内,导致 ins ...
- 网络技能大赛A卷测试
这个测试对我来言有些难度,短时间内做不了太多.首先是思路的理清,登录后的界面有好几种,而且公文的状态也有好几种.理清思路就花了一些时间 然后大致的框架做了做,然后将用户的增删改查还有公文的增删改查写了 ...
- 【音乐欣赏】《JINGO JUNGLE》 - MYTH & ROID
歌名:JINGO JUNGLE 作者:MYTH & ROID [00:19.82]Don’t go away 逃げ場はない [00:27.12]Oh why? You’re crying 嗤え ...
- python浅析模块,包及其相关用法
一,模块 什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里面,代码会越来越长,越来越不容易维护. 为了编写可以维护的代码,我们把很多函数分组,分别放到不同额文件,这样,每个文 ...
- Aggregate 聚合用法
var listb= ListA.Where(x => x.Id.Equals(obj.Id)).Select(x => x.SubData).Aggregate((x, y) => ...
- Python学习(五)—— 集合和字符格式化
数据类型和变量的总结 字符串 数字 列表 元组 字典 分类 1.可变不可变: 可变(即修改变量值以后id不改变):列表.字典 不可变(即修改变量值以后id改变):字符串.数字.元组 2.访问顺序: 直 ...
- Vue ElementUI Tree组件 回显问题(设置选择父级时会全选所有的子级,有此业务场景是不适合的)
业务场景下有这样的问题 业务需求需要保存前端 半选节点 解决方案 let checked = this.$refs.menuTree.getCheckedKeys(); //此方法获取半选节点 let ...
- Fluent_Python_Part2数据结构,02-array-seq,序列类型
1. 序列数据 例如字符串.列表.字节序列.元组.XML元素.数据库查询结果等,在Python中用统一的风格去处理.例如,迭代.切片.排序.拼接等. 2. 容器序列与扁平序列 容器序列:容器对象包含任 ...