文本输入框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="文本" /> ...
随机推荐
- KALI修改密码
许久不用的Kali,某天打开竟忘了密码! 网上的方法颇为简单,遂准备亲自试一下. #光标移动到第二行的“恢复模式”,按E进入[编辑模式] #进入编辑模式,鼠标是不可操作的,用方向键往下面翻 ...
- ubuntu更换pip源
1.创建pip.conf文件 cd ~/.pip 当提示不存在时,创建它 mkdir ~/.pip 在.pip目录下创建一个pip.conf文件 touch pip.conf 2.编辑pip.conf ...
- Git - 02. git 版本库简述: 类比平行宇宙
1. 概述 简单描述 平行宇宙世界观 将 git 与 平行宇宙世界观 做一个类比, 方便理解 熟悉科幻, 或者具体点, 是 漫威宇宙 的朋友, 可以稍微轻松一点 这个是 第一次 重写后的版本. 代码在 ...
- 每天进步一点点------时序分析基础与时钟约束实例(四)IO口时序(Input Delay /output Delay)
1.1 概述 在高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束和时序例外约束才能实现PCB板级的时序收敛.因此,FPGA时序约束中IO口时序约束也是一个重点.只有约束正确 ...
- 「JSOI2016」灯塔
「JSOI2016」灯塔 传送门 我们先只计算照亮左边的灯塔的最低高度,计算右边的类同,然后只要取 \(\max\) 就好了. 那么稍微整理一下式子:\(p_i \ge h_j - h_i + \sq ...
- toSum
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...
- oop(面向对象)中的内置函数
oop中的内置函数 类中存在一些名字带有双下划线__开头的内置函数, 这些函数会在某些时候被自动调用,例如之前学习的迭代器__init__函数 一.isinstance(obj, cls) 检查o ...
- 疫情下的在线上课方案:QQ直播+蓝墨云班课
目录 疫情下的在线上课方案:QQ群视频(腾讯课堂)+蓝墨云班课 使用QQ进行直播 材料 QQ直播步骤 其他问题 使用蓝墨云班课加强学习效果 教材问题 我的直播-小学生硬笔书法基础 我的直播 - C程序 ...
- 再次配置caffe-windows vs2015+cuda10.0+RTX2070+python3.5
前段时间换了一个配置高一点的台式机,因此重新安装了caffe,这次安装遇到了很多以前没有遇到的问题,特记录一下. 先罗列一下电脑配置:vs2015+cuda10.0+python3.5(Anacond ...
- 什么是DO / DTO / BO / VO /AO ?
转载:https://blog.csdn.net/ouzhuangzhuang/article/details/86644476 POJO 是 DO / DTO / BO / VO 的统称. DO(D ...