iOS基础控件-UITextField
前几天看博客的时候iOS控件的关系图。
在图上可以看到iOS中所有的视图控件都是UIView的子类。今天要记录的UITextField在图上可以看到并不是UIView的直接子类,而是UIView的子类UIControl的子类。
UITextField介绍
UITextField是文本输入框,这个控件的作用是让用户输入的,前面介绍的基础控件都是展示的,没有说到用户交互,这个控件就涉及到了交互。关于UIView的交互后面再说。这里也是记录一些基础的内容,关于UITextField的一些复杂使用以后再结合项目分析。
UITextField创建
//UITextField创建 设置位置和大小
UITextField *field = [[UITextField alloc] initWithFrame:CGRectMake(100, 200, 100, 30)];
这里需要注意一点:UITextField的高度是固定的30 无论在创建还是在frame属性中如何设置都是不变的。
UITextField属性
既然UITextField也是UIView的子类,虽然不是直接子类,但是UIView的通用属性在UITextField中也还是适用的,这里就不重复介绍了。
1、text属性
UITextField是一个输入框,所以内容就是最重要的,text属性就是UITextField中输入的文字,默认为nil。
在创建UITextField时若需要在初始在输入框中展示文字就可以使用text属性进行赋值。在后面的程序中若想要使用输入框中输入的文字也可以使用text属性获取。
//给UITextField设置初始文字
field.text = @"初始文字";
//获取UITextField中的文字
NSString *string = field.text;
//打印
NSLog(@"%@", string);
2、textColor、font、textAlignment属性
这3个属性都是和text属性相关的属性,分别是设置输入框中文字颜色,字体大小,文字对齐方式。
//设置文字颜色,字体大小,对齐方式
field.textColor = [UIColor blueColor];
field.font = [UIFont systemFontOfSize:16];
field.textAlignment = NSTextAlignmentCenter;
上面的3条代码,设置了文字颜色为蓝色,字体大小为系统字体16,居中对齐。对齐方式和UILabel中的textAlignment属性一样。
3、borderStyle属性
borderStyle是边框属性,设置UITextField的边框,默认为黑色实线边框。
@property(nonatomic) UITextBorderStyle borderStyle; // default is UITextBorderStyleNone. If set to UITextBorderStyleRoundedRect, custom background images are ignored.
//这里是属性值的typedef。
typedef NS_ENUM(NSInteger, UITextBorderStyle) {
UITextBorderStyleNone,
UITextBorderStyleLine,
UITextBorderStyleBezel,
UITextBorderStyleRoundedRect
};
4、placeholder属性
placeholder 占位符属性,简单一点说就是设置一段文字,当输入的时候这段文字就会消失。
比如我们在登录一个app的时候会要求我们输入账号密码,这个时候在账号的输入框中就会有“账号”、“请输入账号”之类的提示语。这个就是使用了placeholder属性进行设置。
需要注意的是要使用placeholder属性就必须要让text为nil,必然输入框中就会显示text属性赋值的文字。
//placeholder属性设置
field.placeholder = @"请输入";
5、editing属性
@property(nonatomic,readonly,getter=isEditing) BOOL editing;
在UITextField的头文件中可以看到,editing属性是一个bool值的属性,表示UITextField是否在编辑状态,可以使用这个属性进行快速定位输入。
6、keyboardType属性
这个属性不是UIText的直接属性,这个属性的作用是用来设置输入框在编辑状态时键盘样式。下面是键盘样式的typedef。
typedef NS_ENUM(NSInteger, UIKeyboardType) {
UIKeyboardTypeDefault,
UIKeyboardTypeASCIICapable,
UIKeyboardTypeNumbersAndPunctuation,
UIKeyboardTypeURL,
UIKeyboardTypeNumberPad,
UIKeyboardTypePhonePad,
UIKeyboardTypeNamePhonePad,
UIKeyboardTypeEmailAddress,
UIKeyboardTypeDecimalPad NS_ENUM_AVAILABLE_IOS(4_1),
UIKeyboardTypeTwitter NS_ENUM_AVAILABLE_IOS(5_0),
UIKeyboardTypeWebSearch NS_ENUM_AVAILABLE_IOS(7_0),
UIKeyboardTypeASCIICapableNumberPad NS_ENUM_AVAILABLE_IOS(10_0),
UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable,
};
UITextField代理
在UITextField的头文件中有一个delegate。在开发中UITextField的代理是经常用到的,下面来说一下代理的使用。
要使用UITextField的代理需要在使用代理的地方先准守协议。
//准守协议
@interface ViewController ()<UITextFieldDelegate>
就像上面这句代码一样,在文件的interface后面准守协议。下一步就是设置代理。
//设置代理
field.delegate = self;
一般是设置代理为self,也就是设置本类为代理。
最后就是实现代理方法了。
UITextField的常用代理方法如下:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField; // return NO to disallow editing.
- (void)textFieldDidBeginEditing:(UITextField *)textField; // became first responder
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField; // return YES to allow editing to stop and to resign first responder status. NO to disallow the editing session to end
- (void)textFieldDidEndEditing:(UITextField *)textField; // may be called if forced even if shouldEndEditing returns NO (e.g. view removed from window) or endEditing:YES called
- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason NS_AVAILABLE_IOS(10_0); // if implemented, called in place of textFieldDidEndEditing:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text
- (BOOL)textFieldShouldClear:(UITextField *)textField; // called when clear button pressed. return NO to ignore (no notifications)
- (BOOL)textFieldShouldReturn:(UITextField *)textField; // called when 'return' key pressed. return NO to ignore.
上面的代理方法系统会分别在不同的时候调用,在代理方法中,我们可以根据实际的项目开发需要进行相应的代码逻辑编写。根据代理方法在不同时机的调用情况完成开发任务。
总结
因为UITextField涉及到用户交互,这个时候就会有很多复杂的情况,在实际的开发中就需要充分结合开发的其他机制进行灵活运用,比如给UITextField加一个监听,实时监听输入文字的变化以做好逻辑处理,再比如在一个滚动列表中有大量的UITextField,如何进行定位,还有在视图滚动时如何处理cell重用导致的UITextField中文字错位问题。
推荐阅读
-
解决iOS7上UITextField限制字数输入导致崩溃问题的方法
-
iOS中UIScrollerView的用法及基于AotoLayout的控件悬停
-
在Vant的基础上封装下拉日期控件的代码示例
-
Android基础控件RadioGroup使用方法详解
-
iOS开发中UITableview控件的基本使用及性能优化方法
-
详解iOS开发中UItableview控件的数据刷新功能的实现
-
iOS自定义时间滚动选择控件
-
iOS基础学习总结(OC基础总结)
-
IOS-—UICollectionView使用综述(二 )(基础篇--画廊展示图片,瀑布流展示图片)
-
IOS-—UICollectionView使用综述(一 )(基础篇--垂直列表方式,横向相册方式)