Objective-C的UITextField学习笔记

UITextField - 文本输入框

在界面中显示可编辑文本区域的对象。使用UITextField可以使用屏幕键盘从用户收集基于文本的输入。键盘可配置用于许多不同类型的输入,如纯文本、电子邮件、数字等。UITextField使用目标操作机制(addTarget: action: forControlEvents:)和委托对象(UITextFieldDelegate)来报告编辑过程中所做的更改。

除了基本的文本编辑行为外,还可以将覆盖视图添加到UITextField中,以显示附加信息并提供附加的可点击控件。可以为书签按钮或搜索图标等元素添加自定义覆盖视图。UITextField提供一个内置的覆盖视图来清除当前文本。自定义覆盖视图的使用是可选的。

将UITextField添加到界面后,可以将其配置为在应用程序中使用。配置包括执行以下部分或全部任务:

  • 1.为UITextField配置一个或多个目标和操作。
  • 2.配置UITextField的键盘相关属性。
  • 3.分配委托对象以处理重要任务,例如:
    • 确定是否应允许用户编辑UITextField的内容。
    • 正在验证用户输入的文本。
    • 响应键盘返回按钮的点击。
    • 将用户输入的文本转发到应用程序的其他部分。
    • 将对UITextField的引用存储在一个控制器对象中。

UITextField的常用属性

@property(nullable, nonatomic,copy)   NSString               *text;

属性描述UITextField显示的文本。默认情况下,此字符串为@""。为这个属性赋值也会用没有任何固有样式属性的相同的文本替换attributedText属性的值。

@property(nullable, nonatomic,copy)   NSAttributedString     *attributedText API_AVAILABLE(ios(6.0));

属性描述UITextField显示的样式文本(富文本) 。默认情况下,此属性为nil。为该属性指定新值也会用相同的文本替换text属性的值。

@property(nullable, nonatomic,strong) UIColor                *textColor; 

属性描述文本的颜色,会应用于UITextFieldd的整个文本字符串。此属性的默认值为黑色,属性的值只能设置为非nil值,将此属性设置为nil值会引发异常。如果使用的是样式文本(富文本)且样式文本(富文本)设置了颜色,如果在为attributedText属性设置样式文本(富文本)之前设置此属性,不会影响样式文本(富文本)的颜色,如果在为attributedText属性设置样式文本(富文本)之后设置此属性,则该属性设置的颜色值会应用于attributedText属性中的整个字符串。 如果只想将颜色应用于样式文本(富文本)的一部分,请使用所需的样式信息创建一个新的属性字符串,并将其与UITextField关联。

@property(nullable, nonatomic,strong) UIFont                 *font;

属性描述文本的字体,会应用于UITextField的整个文本字符串,它也适用于占位符文本(placeholder)。此属性的默认值是系统字体的正文样式。如果使用的是样式文本(富文本)且样式文本(富文本)设置了字体,如果在为attributedText属性设置样式文本(富文本)之前设置此属性,不会影响样式文本(富文本)的字体,如果在为attributedText属性设置样式文本(富文本)之后设置此属性,则该属性设置的字体值会应用于attributedText属性中的整个字符串。 如果只想将字体应用于样式文本(富文本)的一部分,请使用所需的样式信息创建一个新的属性字符串,并将其与UITextField关联。

@property(nonatomic)        NSTextAlignment         textAlignment; 

属性描述文本的对齐方式。此属性同时应用于UITextField的文本字符串和占位符字符串(placeholder)。此属性的默认值为NSLeftTextAlignment。如果使用的是样式文本(富文本)且样式文本(富文本)设置了对齐方式,如果在为attributedText属性设置样式文本(富文本)之前设置此属性,不会影响样式文本(富文本)的对齐方式,如果在为attributedText属性设置样式文本(富文本)之后设置此属性,则该属性设置的对齐方式值会应用于attributedText属性中的整个字符串。如果只想将对齐方式应用于文本的一部分,请使用所需的样式信息创建一个新的属性字符串,并将其与UITextField关联。

UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(CGRectGetMaxX(self.view.frame) / 2 - 200 / 2, CGRectGetMaxY(self.view.frame) / 2 - 30 / 2 , 200, 30)];
textField.backgroundColor = HEXCOLOR(0xE5E5E5);
textField.textColor = [UIColor redColor];
textField.textAlignment = NSTextAlignmentRight;
textField.placeholder = @"光标会固定的";
[self.view addSubview:textField];

效果如图 :

Jietu20200817-222446.gif
@property(nonatomic)        UITextBorderStyle       borderStyle; 

属性描述UITextField使用的系统提供的边框样式。此属性的默认值为UITextBorderStyleNone。如果该值设置为UITextBorderStyleRoundedRect样式,则将忽略UITextField的自定义背景图像(忽略background属性)。如果该值设置为其它样式,并且UITextField设置了自定义背景图像(设置了background属性),则该值设置的边框样式不会显示。

  • UITextBorderStyle提供边框样式的枚举:
typedef NS_ENUM(NSInteger, UITextBorderStyle) {
    //UITextField不显示边框。
    UITextBorderStyleNone,
    //在UITextField周围显示一个细矩形。
    UITextBorderStyleLine,
    //显示UITextField的边框样式。此样式通常用于标准数据输入字段。
    UITextBorderStyleBezel,
    //显示UITextField的圆形样式边框。
    UITextBorderStyleRoundedRect
};
@property(nullable, nonatomic,strong) UIImage                *background;

属性描述UITextField处于启用状态时的背景图像。如果UITextField设置了系统边框样式(borderStyle)为UITextBorderStyleRoundedRect,则此属性设置的背景图像不显示。如果UITextField设置了系统边框样式(borderStyle)为其它样式,并且此属性设置设置了背景图像,则显示背景图像,忽略UITextField设置的系统边框样式(borderStyle)。

@property(nullable, nonatomic,strong) UIImage                *disabledBackground;

属性描述UITextField处于禁用状态时的背景图像。如果未同时设置启用时的背景图像(background),则忽略此属性。如果UITextField设置了系统边框样式(borderStyle)为UITextBorderStyleRoundedRect,则此属性设置的背景图像不显示。如果UITextField设置了系统边框样式(borderStyle)为其它样式,并且此属性设置设置了背景图像,则显示背景图像,忽略UITextField设置的系统边框样式(borderStyle)。

@property(nonatomic,copy)   NSDictionary *defaultTextAttributes API_AVAILABLE(ios(7.0));

属性描述应用于UITextField中文本的默认属性。默认情况下,此属性返回具有默认值的文本属性字典。设置此属性会将指定的属性应用于UITextField的整个文本。未设置的属性保持其默认值。如果已经设置过UITextField中文本的属性,获取此属性将返回先前设置的属性,这些属性可能已通过设置字体和文本颜色等属性进行了修改。

@property(nullable, nonatomic,copy)   NSString               *placeholder;

属性描述当UITextField中没有其他文本时显示的占位符字符串。默认情况下,此值为nil。占位符字符串使用系统定义的颜色绘制。

@property(nullable, nonatomic,copy)   NSAttributedString     *attributedPlaceholder API_AVAILABLE(ios(6.0));

属性描述当UITextField中没有其他文本时显示的样式字符串(富文本)。默认情况下,此属性为nil。如果样式字符串(富文本)设置未设置颜色,则使用系统定义的颜色和样式字符串(富文本)设置的其它样式信息绘制占位符字符串。为该属性指定新值也会用没有任何样式信息的相同的字符串数据替换placeholder(占位字符)的值,为该属性指定新值不会影响UITextField的任何其他与样式相关的属性。

@property(nonatomic)        UITextFieldViewMode  clearButtonMode;

属性描述控制标准清除按钮何时显示在UITextField中。当UITextField包含内容时,标准的“清除”按钮将显示在UITextField的右侧,以便用户快速删除文本。此按钮将根据为此属性设置的值自动显示。此属性的默认值为UITextFieldViewModeNever。

  • UITextFieldViewMode提供的标准清除按钮何时显示枚举值 :
typedef NS_ENUM(NSInteger, UITextFieldViewMode) {
    //覆盖视图从不出现。
    UITextFieldViewModeNever,
    //只有在UITextField中编辑文本时,才会显示覆盖视图。
    UITextFieldViewModeWhileEditing,
    //仅当未编辑文本时才显示覆盖视图。
    UITextFieldViewModeUnlessEditing,
    //如果UITextField包含文本,则始终显示覆盖视图。
    UITextFieldViewModeAlways
};
@property(nonatomic)        UITextFieldViewMode  leftViewMode; 

属性描述控制UITextField中出现左覆盖视图的时机。此属性的默认值为UITextFieldViewModeNever。

@property(nullable, nonatomic,strong) UIView              *leftView; 

属性描述显示在UITextField左侧(或前导)的覆盖视图。可以使用左覆盖视图指示UITextField的预期行为。例如,可以在此位置显示放大镜,以指示UITextField是用于搜索的。在从右到左的用户界面中,左覆盖视图会自动翻转。

左覆盖视图放置在接收器的leftViewRectForBounds:方法返回的矩形中。与此属性关联的图像应适合给定的矩形。如果不适合,则按比例调整。如果为视图指定控件,则该控件将照常可以跟踪和发送消息操作。

@property(nonatomic)        UITextFieldViewMode  rightViewMode;

属性描述控制UITextField中出现右覆盖视图的时机。此属性的默认值为UITextFieldViewModeNever。

@property(nullable, nonatomic,strong) UIView              *rightView;

属性描述显示在UITextField右侧(或尾部)的覆盖视图。可以使用右侧的覆盖视图来提供指示UITextField可用的其他功能。例如,可以在此位置显示书签按钮,以允许用户从一组预定义项中进行选择。右覆盖视图在从右向左的用户界面中自动翻转。

右覆盖视图放置在由接收器的rightViewRectForBounds:方法返回的矩形中。与此属性关联的图像应符合给定的矩形。如果它不适合,它会缩放以适应。如果为视图指定一个控件,该控件将照常可以跟踪和发送消息操作。

如果右侧的覆盖视图与同级视图重叠,例如clear按钮,必须使用UITextFieldViewMode来实现正确的行为。例如,如果clearButtonMode被设置为编辑时显示clear按钮,可以将右侧的覆盖视图的rightViewMode设置为UITextFieldViewModeUnlessEditing(仅当未编辑文本时才显示覆盖视图),以调节clear按钮与右侧的覆盖视图显示。

UITextField绘图和定位的重写函数

- (CGRect)borderRectForBounds:(CGRect)bounds;

函数描述返回UITextField的系统样式边框的框架矩形(borderStyle设置的样式边框,不是添加到UITextField的layer层的边框)。不应直接调用此方法。如果要为UITextField提供自定义的系统样式边框的框架矩形,可以重写此方法并返回新框架矩形。此方法的默认实现返回原始的接收方(重写函数的控件)的框架矩形,不考虑覆盖视图占用的区域。

参数 :

bounds : 接收方(重写函数的控件)的框架矩形。

返回值 : 自定义的UITextField的系统样式边框的框架矩形。

- (CGRect)textRectForBounds:(CGRect)bounds;

函数描述返回UITextField展示已经输入完成的文本的框架矩形。不应直接调用此方法。如果要自定义展示已经输入完成的文本的框架矩形,可以重写此方法并返回新的框架矩形。此方法的默认实现返回原始的接收方(重写函数的控件)的框架矩形,不考虑覆盖视图占用的区域。

参数 :

bounds : 接收方(重写函数的控件)的框架矩形。

返回值 : 自定义的展示已经输入完成的文本的框架矩形。

- (CGRect)placeholderRectForBounds:(CGRect)bounds;

函数描述返回UITextField展示占位符文本的框架矩形。不应直接调用此方法。如果要自定义展示占位符文本的框架矩形,可以重写此方法并返回新的框架矩形。如果占位符字符串为空或为零,则不调用此方法。此方法的默认实现返回原始的接收方(重写函数的控件)的框架矩形,不考虑覆盖视图占用的区域。

参数 :

bounds : 接收方(重写函数的控件)的框架矩形。

返回值 : 自定义的展示占位符文本的框架矩形。

- (CGRect)editingRectForBounds:(CGRect)bounds;

函数描述返回UITextField展示正在编辑的文本的框架矩形。不应直接调用此方法。如果要自定义展示正在编辑的文本的框架矩形,可以重写此方法并返回新的框架矩形。此方法的默认实现返回原始的接收方(重写函数的控件)的框架矩形,不考虑覆盖视图占用的区域。

参数 :

bounds : 接收方(重写函数的控件)的框架矩形。

返回值 : 自定义的展示正在编辑的文本的框架矩形。

- (CGRect)clearButtonRectForBounds:(CGRect)bounds;

函数描述返回内置清除按钮的框架矩形。不应直接调用此方法。如果要将“清除”按钮放置在其他位置,可以重写此方法并返回新的矩形。方法应该调用父类实现并只修改返回矩形的原点,因为更改“清除”按钮的大小可能会导致按钮图像不必要的失真。

参数 :

bounds : 接收方(重写函数的控件)的框架矩形。

返回值 : 自定义的绘制清除按钮的框架矩形。

- (CGRect)leftViewRectForBounds:(CGRect)bounds;

函数描述返回UITextField左覆盖视图的绘制矩形。不应直接调用此方法。如果要将左覆盖视图放置在其他位置,可以重写此方法并返回新的绘制矩形。注意,在从右到左的用户界面中,绘图矩形保持不变。

参数 :

bounds : 接收方(重写函数的控件)的框架矩形。

返回值 :自定义的绘制左覆盖视图的框架矩形。

- (CGRect)rightViewRectForBounds:(CGRect)bounds;

函数描述返回UITextField右覆盖视图的绘制矩形。不应直接调用此方法。如果要将右覆盖视图放置在其他位置,可以重写此方法并返回新的绘制矩形。注意,在从右到左的用户界面中,绘图矩形保持不变。

参数 :

bounds : 接收方(重写函数的控件)的框架矩形。

返回值 : 自定义的绘制右覆盖视图的框架矩形。

UITextField提供的代理函数

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField; 

函数描述询问代理是否应在指定的UITextField中开始编辑。当用户执行通常会启动UITextField文本编辑的操作时,UITextField调用此方法。如果要防止在某些情况下进行编辑,请实现此方法。例如,可以使用此方法防止用户多次编辑UITextField的内容。大多数情况下,应该返回YES以允许继续编辑。如果不实现此方法,则UITextField的作用就像此方法返回了YES。

参数 :

textField : 编辑即将开始的UITextField。

返回值 : 如果应该开始编辑,则为“YES”;如果不应该开始编辑,则为“NO”。

- (void)textFieldDidBeginEditing:(UITextField *)textField; 

函数描述通知代理从指定的UITextField开始编辑。此方法通知代理指定的UITextField刚刚成为第一个响应程序。使用此方法更新状态信息或执行其他任务。例如,可以使用此方法显示仅在编辑时可见的覆盖视图。代理对此方法的实现是可选的。

参数 :

textField : 开始编辑会话的UITextField。

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField;

函数描述询问委托是否应在指定的UITextField中停止编辑。当要求退出第一响应程序状态时,UITextField调用此方法。当用户选择另一个控件或调用UITextField的resignFirstResponder方法时,可能会发生这种情况。但是,在焦点更改发生之前,UITextField将调用此方法提供防止更改发生的机会。

通常,将从该方法返回YES,以允许UITextField放弃第一响应程序状态。但是,如果委托在UITextField中检测到无效内容,则可能返回NO。如果返回NO,则在UITextField包含有效值之前,用户无法切换到其他控件。

如果使用此方法UITextField字段的内容,则可能还希望使用覆盖视图提供对此效果的反馈。例如,可能会显示一个小图标,指示文本无效。

此方法仅提供有关编辑是否应结束的建议。即使返回NO,UIKit也可能会强制终止编辑。例如,当UITextField从其父视图或窗口中删除时,它们总是会重新指定第一响应程序状态。

代理对此方法的实现是可选的。如果未实现此方法,则UITextField将重设第一个响应程序状态,如同此方法已返回“YES”。

- (void)textFieldDidEndEditing:(UITextField *)textField; 

函数描述通知代理已停止对指定UITextField的编辑。此方法在UITextField重设其第一个响应程序状态后调用。可以使用此方法更新代理的状态信息。例如,可以使用此方法隐藏应仅在编辑时可见的覆盖视图。代理对此方法的实现是可选的。如果代理还实现了textFieldDidEndEditing:reason:方法,UIKit会优先调用textFieldDidEndEditing:reason:方法。

参数 :

textField : 编辑结束的UITextField。

- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason API_AVAILABLE(ios(10.0)); 

函数描述通知代理已停止对指定UITextField的编辑。此方法在UITextField重设其第一个响应程序状态后调用。可以使用此方法更新代理的状态信息。例如,可以使用此方法隐藏应仅在编辑时可见的覆盖视图。代理对此方法的实现是可选的。UIKit优先于textFieldDidEndEditing:方法调用此方法。

参数 :

textField : 编辑结束的UITextField。

reason : 编辑结束的原因。使用此字段可确定是合并文本编辑更改还是放弃这些更改。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;  

函数描述询问代理是否应更改指定的文本。每当用户操作导致文本更改时,UITextField调用此方法。使用此方法验证用户键入的文本。例如,可以使用此方法防止用户输入数值以外的任何内容。

参数 :

textField : 包含文本的UITextField。

range : 要替换的字符范围。

string : 指定范围的替换字符串。在输入期间,此参数通常只包含输入的单个新字符,但如果用户正在粘贴文本,则它可能包含更多字符。当用户删除一个或多个字符时,替换字符串为空。

返回值 : YES,表示修改生效;NO,表示不做修改,textField的内容不变。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    
    NSString *text = [textField.text stringByAppendingString:string] ? : string;

    if (text.floatValue > 50.0) {
        [self.view makeToast:@"最多可使用的余额50.0元"];
        return NO;
    }
    //#####验证输入的内容
    if ([textField.text containsString:@"."]) {
        self.isHaveDian = YES;
    }else{
        self.isHaveDian = NO;
    }
    
    if (string.length > 0) {
        
        //当前输入的字符
        unichar single = [string characterAtIndex:0];
        
        //验证是否是数字
        NSString *phoneRegex = @"^[0-9]+(\\.[0-9]{0,2})?$";
        NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
        if(single != '.' && ![phoneTest evaluateWithObject:string]){
            [self.view makeToast:@"请输入数字格式"];
            return NO;
        }
        
        [NSString stringWithFormat:@"single = %c",single];
        // 只能有一个小数点
        if (self.isHaveDian && single == '.') {
            [self.view makeToast:@"最多只能输入一个小数点"];
            return NO;
        }
        // 如果第一位是.则前面加上0.
        if ((textField.text.length == 0) && (single == '.')) {
            textField.text = @"0";
        }
        // 如果第一位是0则后面必须输入点,否则不能输入。
        if ([textField.text hasPrefix:@"0"]) {
            if (textField.text.length > 1) {
                NSString *secondStr = [textField.text substringWithRange:NSMakeRange(1, 1)];
                if (![secondStr isEqualToString:@"."]) {
                    [self.view makeToast:@"第二个字符需要是小数点"];
                    return NO;
                }
            }else{
                if (![string isEqualToString:@"."]) {
                    [self.view makeToast:@"第二个字符需要是小数点"];
                    return NO;
                }
            }
        }
        // 小数点后最多能输入两位
        if (self.isHaveDian) {
            NSRange ran = [textField.text rangeOfString:@"."];
            // 由于range.location是NSUInteger类型的,所以这里不能通过(range.location - ran.location)>2来判断
            if (range.location > ran.location) {
                if ([textField.text pathExtension].length > 1) {
                    [self.view makeToast:@"小数点后最多有两位小数"];
                    return NO;
                }
            }
        }
        
    }
    return YES;
}

- (BOOL)textFieldShouldClear:(UITextField *)textField; 

函数描述询问代理是否应删除UITextField的当前内容。UITextField调用此方法以响应用户按下内置的清除按钮。(默认情况下不显示此按钮,但可以通过更改UITextField的clearButtonMode属性中的值来启用此按钮。)当编辑开始并且UITextField的ClearOnBeginEditing属性设置为“YES”时,也会调用此方法。如果未实现此方法,则UITextField将清除文本,如同该方法已返回“YES”。

参数 :

textField : 包含文本的UITextField。

返回值 : 如果应该清除UITextField的内容,则为“YES”;否则为“NO”。

- (BOOL)textFieldShouldReturn:(UITextField *)textField;

函数描述询问代理UITextField是否应处理按返回按钮的操作。每当用户点击return按钮时,UITextField都会调用此方法。点击按钮时,可以使用此方法实现任何自定义行为。例如,如果想在用户点击return按钮时关闭键盘,那么可以在实现的函数中调用resignFirstResponder方法。

参数 :

textField : 按下返回按钮的UITextField。

返回值 : 如果UITextField应实现返回按钮的默认行为,则为“YES”;否则为“NO”。

UITextInputTraits协议

定义与文本对象的键盘输入相关联的功能的方法集合。要使自定义文本对象支持键盘输入,它必须采用此协议才能与文本输入管理系统正确交互。UITextField和UITextView类自动支持此协议。

UITextInputTraits协议的常用属性

@property(nonatomic) UITextAutocapitalizationType autocapitalizationType;

属性描述文本对象的自动大写样式。此属性确定自动按下Shift键的时间,从而使键入的字符成为大写字母。此属性的默认值为UITextAutocapitalizationTypeSentences。有些键盘类型不支持自动大写。特别是,如果keyboardType属性中的值设置为UIKeyboardTypeNumberPad、UIKeyboardTypePhonePad或UIKeyboardTypeNamePhonePad,则忽略此选项。

  • UITextAutocapitalizationType提供的自动大写样式枚举:
typedef NS_ENUM(NSInteger, UITextAutocapitalizationType) {
    //指定没有自动文本大写。
    UITextAutocapitalizationTypeNone,
    //指定每个单词的第一个字母的自动大写。
    UITextAutocapitalizationTypeWords,
    //指定每个句子第一个字母的自动大写。
    UITextAutocapitalizationTypeSentences,
    //指定所有字符的自动大写。
    UITextAutocapitalizationTypeAllCharacters,
};
@property(nonatomic) UITextAutocorrectionType autocorrectionType;

属性描述文本对象的自动更正样式。此属性确定键入时是否启用或禁用自动更正。启用自动更正后,文本对象将跟踪未知单词并向用户建议更合适的替换候选词,除非用户显式重写该操作,否则将自动替换键入的文本。
此属性的默认值为UITextAutocorrectionTypeDefault,对于大多数输入方法,这将导致启用自动更正。

  • UITextAutocorrectionType文本对象的自动更正样式枚举
typedef NS_ENUM(NSInteger, UITextAutocorrectionType) {
    //为当前脚本系统指定适当的自动更正行为。
    UITextAutocorrectionTypeDefault,
    //禁用自动更正行为。
    UITextAutocorrectionTypeNo,
    //启用自动更正行为。
    UITextAutocorrectionTypeYes,
};
@property(nonatomic) UITextSpellCheckingType spellCheckingType API_AVAILABLE(ios(5.0)); 

属性描述文本对象的拼写检查样式。此属性确定键盘输入期间是否启用或禁用拼写检查。启用拼写检查后,文本对象将为所有拼写错误的单词生成红色下划线。如果用户点击拼写错误的单词,文本对象将向用户显示可能的更正列表。

此属性的默认值是UITextSpellCheckingTypeDefault,它在启用自动更正时启用拼写检查。此属性中的值将覆盖用户在“设置>常规>键盘”中设置的拼写检查设置。

  • UITextSpellCheckingType拼写检查样式的枚举 :
typedef NS_ENUM(NSInteger, UITextSpellCheckingType) {
    //指定默认的拼写检查行为。默认行为是在启用自动更正时启用拼写检查。
    UITextSpellCheckingTypeDefault,
    //禁用拼写检查行为。
    UITextSpellCheckingTypeNo,
    //启用拼写检查行为。
    UITextSpellCheckingTypeYes,
} API_AVAILABLE(ios(5.0));
@property(nonatomic) UITextSmartQuotesType smartQuotesType API_AVAILABLE(ios(11.0));

属性描述智能引号的配置状态。使用此属性可配置UIKit是否用区域特定的标志符号替换直撇号和引号。此属性的默认值是UITextSmartQuotesTypeDefault,它根据键盘类型选择性地启用智能引号。

  • UITextSmartQuotesType智能引号的配置状态的枚举:
typedef NS_ENUM(NSInteger, UITextSmartQuotesType) {
    //使用默认的智能引号的配置行为。此选项根据键盘类型有选择地启用智能引号的配置行为。
    //例如,对电子邮件地址和密码键盘禁用智能引号。
    UITextSmartQuotesTypeDefault,
    //禁用智能引号。
    UITextSmartQuotesTypeNo,
    //启用智能引号。
    UITextSmartQuotesTypeYes,
} API_AVAILABLE(ios(11.0));
@property(nonatomic) UITextSmartDashesType smartDashesType API_AVAILABLE(ios(11.0));

属性描述智能虚线的配置状态。使用此属性可配置UIKit是否自动将两个连字符转换为en破折号,将三个连字符转换为em破折号。此属性的默认值是UITextSmartDashesTypeDefault,它根据键盘类型有选择地启用智能虚线。

  • UITextSmartDashesType智能虚线的配置状态的枚举:
typedef NS_ENUM(NSInteger, UITextSmartDashesType) {
    //使用默认的智能划线行为。此选项根据键盘类型有选择地启用智能短划线行为。
    //例如,对电子邮件地址和密码键盘禁用划线行为。
    UITextSmartDashesTypeDefault,
    //禁用智能虚线。
    UITextSmartDashesTypeNo,
    //启用智能虚线。
    UITextSmartDashesTypeYes,
} API_AVAILABLE(ios(11.0));
@property(nonatomic) UITextSmartInsertDeleteType smartInsertDeleteType API_AVAILABLE(ios(11.0));

属性描述智能插入和删除空格字符的配置状态。使用此属性可配置UIKit是可以在粘贴操作后插入额外的空格,还是可以在剪切或删除操作后删除一个或两个空格。此属性的默认值是UITextSmartInsertDeleteTypeDefault,它根据键盘类型选择性地启用行为。

  • UITextSmartInsertDeleteType智能插入和删除空格字符的配置状态的枚举:
typedef NS_ENUM(NSInteger, UITextSmartInsertDeleteType) {
    //使用默认行为插入和删除空格字符。此选项有选择地启用在剪切或删除后自动删除一个或两个相邻空格,
   //并在粘贴后插入额外空格。例如,此选项禁用电子邮件地址和密码键盘的行为。
    UITextSmartInsertDeleteTypeDefault,
    //禁止插入或删除多余的空格。
    UITextSmartInsertDeleteTypeNo,
    //启用多余的空格插入或删除。
    UITextSmartInsertDeleteTypeYes,
} API_AVAILABLE(ios(11.0));
@property(nonatomic) UIKeyboardType keyboardType;      

属性描述与文本对象关联的键盘样式。文本对象可以针对特定类型的输入,例如纯文本、电子邮件、数字输入等。键盘样式标识键盘上可用的键和默认显示的键。此属性的默认值为UIKeyboardTypeDefault。

  • UIKeyboardType提供的键盘样式枚举:
typedef NS_ENUM(NSInteger, UIKeyboardType) {
    //当前输入方法的默认类型。
    UIKeyboardTypeDefault,
    // 显示可以输入ASCII字符的键盘。
    UIKeyboardTypeASCIICapable,      
    // 数字和各种标点符号。
    UIKeyboardTypeNumbersAndPunctuation, 
    //为URL入口优化的类型(突出显示. / com)。
    UIKeyboardTypeURL,     
    //一种带有与地区相适应的数字(0-9、۰-۹、०-९等)的数字键盘,适用于PIN
    //(个人密码(全写为personal identification number)。
    UIKeyboardTypeNumberPad,   
    //电话本(1-9,*,0,#,数字下面有字母)。  
    UIKeyboardTypePhonePad, 
    //一种为输入人名或电话号码而优化的类型。 
    UIKeyboardTypeNamePhonePad, 
    //为多个电子邮件地址条目优化的类型(突出显示空格@)。
    UIKeyboardTypeEmailAddress, 
    //带小数点的数字记数板。
    UIKeyboardTypeDecimalPad API_AVAILABLE(ios(4.1)),   
    //为twitter文本输入优化的类型(易于访问@#)。
    UIKeyboardTypeTwitter API_AVAILABLE(ios(5.0)), 
    //指定为web搜索词和URL条目优化的键盘。此键盘类型突出显示空格和句点(“.”)字符。
    UIKeyboardTypeWebSearch API_AVAILABLE(ios(7.0)),   
    //指定仅输出ASCII数字的数字键盘。
    UIKeyboardTypeASCIICapableNumberPad API_AVAILABLE(ios(10.0)), 
    //指定为字母输入优化的键盘
    UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, // Deprecated

};
@property(nonatomic) UIKeyboardAppearance keyboardAppearance; 

属性描述与文本对象关联的键盘的外观样式。此属性允许区分应用程序中的默认文本项和警报面板中的文本项。此属性的默认值为UIKeyboardAppearanceDefault。

  • UIKeyboardAppearance与文本对象关联的键盘的外观样式提供的枚举:
typedef NS_ENUM(NSInteger, UIKeyboardAppearance) {
    //指定当前输入方法的默认键盘外观。此常量对应于UIKeyboardAppearanceLight值。
    UIKeyboardAppearanceDefault, 
    //指定适合深色用户界面外观的键盘外观。
    UIKeyboardAppearanceDark API_AVAILABLE(ios(7.0)),
    //指定适合浅色用户界面外观的键盘外观。
    UIKeyboardAppearanceLight API_AVAILABLE(ios(7.0)),
    //指定适合警报面板的键盘外观。
    UIKeyboardAppearanceAlert = UIKeyboardAppearanceDark,  // Deprecated
};
@property(nonatomic) UIReturnKeyType returnKeyType; 

属性描述返回键的可见标题。将此属性设置为其他键类型会更改返回键的可见标题,并且通常会导致在按下键盘时将其取消。此属性的默认值为UIReturnKeyDefault。

  • UIReturnKeyType提供的返回键可见标题枚举 :
typedef NS_ENUM(NSInteger, UIReturnKeyType) {
    //指定返回键的可见标题为“Return”。
    UIReturnKeyDefault,
    //指定返回键的可见标题为“Go”。
    UIReturnKeyGo,
    //指定返回键的可见标题为“Google”。
    UIReturnKeyGoogle,
    //指定返回键的可见标题为“连接”。
    UIReturnKeyJoin,
    //指定返回键的可见标题为“下一个”。
    UIReturnKeyNext,
    //指定返回键的可见标题为“Route”。
    UIReturnKeyRoute,
    //指定返回键的可见标题为“搜索”。
    UIReturnKeySearch,
    //指定返回键的可见标题为“发送”。
    UIReturnKeySend,
    //指定返回键的可见标题为“Yahoo”。
    UIReturnKeyYahoo,
    //指定返回键的可见标题为“完成”。
    UIReturnKeyDone,
    //指定返回键的可见标题为“紧急呼叫”。
    UIReturnKeyEmergencyCall,
    //指定返回键的可见标题为“继续”。
    UIReturnKeyContinue API_AVAILABLE(ios(9.0)),
};

@property(nonatomic) BOOL enablesReturnKeyAutomatically;   

属性描述一个布尔值,指示用户输入文本时是否自动启用返回键。此属性的默认值为“NO”。如果将其设置为“YES”,则当文本输入区域不包含文本时,键盘将禁用返回键。只要用户输入一些文本,返回键就会自动启用。

@property(nonatomic,getter=isSecureTextEntry) BOOL secureTextEntry;

属性描述标识文本对象是否应禁用文本复制,并在某些情况下隐藏正在输入的文本。默认情况下,此属性设置为NO。在任何符合UITextInputTraits的视图中将这个属性设置为YES,用户将无法在视图中复制文本。在UITextField对象中将此属性设置为YES还可以实现密码样式的体验,在这种体验中输入的文本是模糊的。

@property(null_unspecified,nonatomic,copy) UITextContentType textContentType API_AVAILABLE(ios(10.0));

属性描述文本输入区所期望的语义。使用此属性可以向键盘和系统提供有关用户输入的内容的预期语义的信息。例如,可以为用户填写以接收电子邮件确认的UITextField指定UITextContentTypeEmailAddress。当您提供有关您希望用户在文本输入区域中输入的内容的信息时,系统在某些情况下可以自动选择适当的键盘,并改进键盘更正和与其他文本输入机会的主动集成。
因为每个文本输入区域的预期语义应该尽可能明确地标识出来,所以不能为一个textContentType属性组合多个值。默认情况下,此属性的值为nil。

  • UITextContentType文本输入区所期望的语义定义的常量:
//指定名称的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeName                      API_AVAILABLE(ios(10.0));
//指定前缀或标题的期望值,例如“Dr.”。
UIKIT_EXTERN UITextContentType const UITextContentTypeNamePrefix                API_AVAILABLE(ios(10.0));
//指定给定名称的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeGivenName                 API_AVAILABLE(ios(10.0));
//指定中间名的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeMiddleName                API_AVAILABLE(ios(10.0));
//指定姓氏的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeFamilyName                API_AVAILABLE(ios(10.0));
//指定后缀的期望值,例如“Jr.”。
UIKIT_EXTERN UITextContentType const UITextContentTypeNameSuffix                API_AVAILABLE(ios(10.0));
//指定昵称的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeNickname                  API_AVAILABLE(ios(10.0));
//指定对职务的期望。
UIKIT_EXTERN UITextContentType const UITextContentTypeJobTitle                  API_AVAILABLE(ios(10.0));
//指定组织名称的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeOrganizationName          API_AVAILABLE(ios(10.0));
//定位置的期望值,例如兴趣点、地址或标识位置的其他方式。
UIKIT_EXTERN UITextContentType const UITextContentTypeLocation                  API_AVAILABLE(ios(10.0));
//指定完全标识位置的街道地址的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeFullStreetAddress         API_AVAILABLE(ios(10.0));
//指定街道地址第一行的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeStreetAddressLine1        API_AVAILABLE(ios(10.0));
//指定街道地址第二行的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeStreetAddressLine2        API_AVAILABLE(ios(10.0));
//指定城市名称的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeAddressCity               API_AVAILABLE(ios(10.0));
//指定状态名的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeAddressState              API_AVAILABLE(ios(10.0));
//指定城市名与州名组合的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeAddressCityAndState       API_AVAILABLE(ios(10.0));
//指定次局部性的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeSublocality               API_AVAILABLE(ios(10.0));
//指定国家名称的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeCountryName               API_AVAILABLE(ios(10.0));
//指定邮政编码的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypePostalCode                API_AVAILABLE(ios(10.0));
//指定电话号码的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeTelephoneNumber           API_AVAILABLE(ios(10.0));
//指定电子邮件地址的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeEmailAddress              API_AVAILABLE(ios(10.0));
//指定URL的期望值
UIKIT_EXTERN UITextContentType const UITextContentTypeURL                       API_AVAILABLE(ios(10.0));
//文本输入区域指定信用卡号的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeCreditCardNumber          API_AVAILABLE(ios(10.0));
//文本输入区域指定帐户或登录名的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeUsername                  API_AVAILABLE(ios(11.0));
//文本输入区指定密码的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypePassword                  API_AVAILABLE(ios(11.0));
//文本输入区指定新密码的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeNewPassword               API_AVAILABLE(ios(12.0));
//文本输入区域指定单因素SMS登录代码的期望值。
UIKIT_EXTERN UITextContentType const UITextContentTypeOneTimeCode               API_AVAILABLE(ios(12.0));

你可能感兴趣的:(Objective-C的UITextField学习笔记)