IOS--文本TextField,TextView详细分析,以及
2019-04-02 本文已影响7人
星辰_入海
喜欢我的文章可以关注我哦,➕我,每日更新新的教程,带你玩转ios开发
本章分析TextField 以及 TextView 的使用方式
典型案例--字典
图1 字典中的输入框
在字典当中我们需要输入查找的单词 以及 翻译文本时候,我们可以在翻译框内进行输入文字--其中查找单词以及翻译文本的控件类似于TextField and TextView的功能
现在,让我们来重新认识一下这两位朋友
一. TextField
本质:文本类视图,同时有自己的委托协议<UITextFieldDelegate>
实现部分
1.利用故事版进行实现

Step1:从对象控件库中选择TextField控件,并拖拽到故事版中;
Step2:可以通过属性列表进行设置属性
<1>设置字体内容,颜色,大小
<2>设置TextField的方框类型,以及清除按钮等

Step3:实现委托协议
@interface ViewController()<UITextFieldDelegate>
@end
Step4:实现委托方法
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
NSLog(@"TextFiled获得焦点,点击return建");
return YES;
}
-(BOOL)textFieldShouldClear:(UITextField *)textField{
NSLog(@"TextFiled获得焦点,点击clear建");
return YES;
}
分析:当TextFiled获得焦点,键盘点击return建,当TextFiled获得焦点,点击clear建,通过两个方法实现委托协议【重点:只通过代码使得对象成为委托对象,必须在故事版建立委托分配!!!】
图4 建立委托协议的委托分配
- 使得委托协议与ViewController建立协议
2.利用代码进行书写TextFiled
//创建一个TextField
CGFloat textFieldWidth = 414;
CGFloat textFieldHeight = 30;
CGFloat textFieldTop = 150;
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake((screen.size.width-textFieldWidth), textFieldTop, textFieldWidth, textFieldHeight)];
textField.borderStyle = UITextBorderStyleLine;
textField.delegate = self;
textField.returnKeyType = UIReturnKeyJoin;
[self.view addSubview:textField];
//label标签与textfield之间的距离
CGFloat labelNameTextFieldScpace = 30;
UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(textField.frame.origin.x, textField.frame.origin.y-labelNameTextFieldScpace, 51, 21)];
labelName.text = @"Name: ";
[self.view addSubview:labelName];
思路:创建一个textfield的位置坐标,并且初始化,设置文本框的类型为UITextBorderStyleLine,并遵循协议textField.delegate = self;
文本框的类型(c结构体)
typedef NS_ENUM(NSInteger, UITextBorderStyle) {
UITextBorderStyleNone,
UITextBorderStyleLine,
UITextBorderStyleBezel,
UITextBorderStyleRoundedRect
};
委托如下
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
NSLog(@"return");
[self resignFirstResponder];
return (YES);
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{
NSLog(@"clear");
return (YES);
}
二. TextView
1.利用故事版进行实现
如上TextField相同
2.利用代码进行书写
//创建一个TextView
CGFloat textViewWidth = 414;
CGFloat textViewHeight = 198;
CGFloat textViewTopView = 300;
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(screen.size.width-textViewWidth,screen.size.height-textViewTopView, textViewWidth, textViewHeight)];
textView.text = @"Learn more launage for the programmer........";
textView.delegate = self;
[self.view addSubview:textView];
CGFloat lableAbstarctTextViewSpace = 30;
UILabel *lableAbstarct = [[UILabel alloc] initWithFrame:CGRectMake(textView.frame.origin.x, textView.frame.origin.y-lableAbstarctTextViewSpace, 103, 21)];
lableAbstarct.text = @"Abstarct:";
[self.view addSubview:lableAbstarct];
委托协议实现如下
#pragma mark --实现TextView协议
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if ([text isEqualToString:@"\n"]) {
[self resignFirstResponder];
return (NO);
}
return (YES);
}

三. 键盘的打开与关闭
我们知道,对于键盘的调用方是TextField以及TextView,所以TextField以及TextView是第一响应者,所以关闭键盘需要,让TextField以及TextView失去第一响应者的身份,所以需要调用[self resignFirstResponder]的消息发送机制
- (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)keyBoardDidShow:(NSNotification *)notification{
NSLog(@"键盘打开");
}
- (void)keyBoardDidHide:(NSNotification *)notification{
NSLog(@"键盘关闭");
}
思路:通过通知方式进行传送键盘打开通知,同理需要关闭键盘在TextField以及TextView委托中执行
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
NSLog(@"return");
[self resignFirstResponder];
return (YES);
}
#pragma mark --实现TextView协议
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if ([text isEqualToString:@"\n"]) {
[self resignFirstResponder];
return (NO);
}
return (YES);
}
四. 键盘的种类
typedef NS_ENUM(NSInteger, UIReturnKeyType) {
UIReturnKeyDefault,
UIReturnKeyGo,
UIReturnKeyGoogle,
UIReturnKeyJoin,
UIReturnKeyNext,
UIReturnKeyRoute,
UIReturnKeySearch,
UIReturnKeySend,
UIReturnKeyYahoo,
UIReturnKeyDone,
UIReturnKeyEmergencyCall,
UIReturnKeyContinue NS_ENUM_AVAILABLE_IOS(9_0),
};