博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文本输入框UITextField和UITextView
阅读量:5214 次
发布时间:2019-06-14

本文共 3576 字,大约阅读时间需要 11 分钟。

本文概要

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键,调用这个方法,我们一般是放在它们各自的委托协议中去实现:

1 #pragma mark -UITextFieldDelegate 2 - (BOOL)textFieldShouldReturn:(UITextField *)textField 3 { 4     [textField resignFirstResponder]; 5     return YES; 6 } 7  8 #pragma mark -UITextViewDelegate 9 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text10 {11     if ([text isEqualToString:@"\n"]) {12         [textView resignFirstResponder];13         return NO;14     }15     return YES;16 }

想要实现点击背景视图时,调用这个方法,使用view的touchesBegan:触摸事件来实现对键盘的隐藏,当点击view的区域就会触发这个事件:

1 - (void)touchesBegan:(NSSet
*)touches withEvent:(UIEvent *)event {2 [super touchesBegan:touches withEvent:event];3 [self.view endEditing:YES];4 }

另外,如果界面中有很多控件,或者控件的位置比较靠近屏幕下方,控件就很可能会被弹出的键盘挡住,此时可以添加UIScrollView控件来解决。

5.关闭和打开键盘的通知

在关闭和打开键盘时,iOS系统分别会发出如下广播通知:UIKeyboardDidHideNotification(关闭时)和UIKeyboardDidShowNotification(打开时)。

使用广播通知时,需要注意在合适的时机注册和解除通知,下边的举例在ViewController中分别在viewWillAppear:方法中注册通知,在viewWillDisappear:方法中解除通知。

1 - (void)viewWillAppear:(BOOL)animated 2 { 3     [super viewWillAppear:animated]; 4      5     //注册键盘出现通知 6     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; 7      8     //注册键盘隐藏通知 9     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];10 }11 12 - (void)viewWillDisappear:(BOOL)animated13 {14     //解除键盘出现通知15     [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];16     17     //解除键盘隐藏通知18     [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];19 }20 21 - (void)keyboardDidShow: (NSNotification *)notif22 {23     NSLog(@"键盘打开");24 }25 26 - (void)keyboardDidHide: (NSNotification *)notif27 {28     NSLog(@"键盘隐藏");29 }

6.键盘的种类

有输入动作的控件有三个属性用来设置与键盘相关的属性。比如系统提供了11种类型的键盘,选择不同的键盘类型,会在iOS上弹出不同的键盘。而且可以设置return键的文本,如果控件内输入的是查询条件,我们可以将return键的文本设置为Go或者search,示意接下来进行的就是查找动作。最后可以设置键盘的外观。需要说明的是,这些设置是具体到某个有输入动作的控件而言的。代码举例如下:

1     //设置键盘的类型(枚举值)2     myTextField.keyboardType = UIKeyboardTypeDefault;3     4     //设置键盘的Return键的文本(枚举值)5     myTextField.returnKeyType =UIReturnKeyDone;6     7     //设置键盘的外观(枚举值)8     myTextField.keyboardAppearance=UIKeyboardAppearanceDark;

 

转载于:https://www.cnblogs.com/cchHers/p/5339604.html

你可能感兴趣的文章
独家 | TensorFlow 2.0将把Eager Execution变为默认执行模式,你该转向动态计算图了...
查看>>
react + dva + ant架构后台管理系统(一)
查看>>
[转]ASP数组全集,多维数组和一维数组
查看>>
我的中兴五年:加班为何成了底层员工心中永远的痛
查看>>
git学习
查看>>
C# winform DataGridView 常见属性
查看>>
逻辑运算和while循环.
查看>>
Nhiberate (一)
查看>>
c#后台计算2个日期之间的天数差
查看>>
安卓开发中遇到的小问题
查看>>
ARTS打卡第3周
查看>>
HDU 2189 悼念512汶川大地震遇难同胞――来生一起走 --生成函数
查看>>
js知识梳理3:创建对象的模式探究
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
cookies相关概念
查看>>
android动态权限获取
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
siebel 中 join 使用心得
查看>>
剑指Offer:重建二叉树
查看>>
MyBatis课程2
查看>>