当前位置:   article > 正文

iOS UITextField控件

ios uitextfield

UITextField在界面中显示可编辑文本区域的对象。

1. 基本属性

// 文本
@property(nullable, nonatomic,copy) NSString *text;
// 富文本
@property(nullable, nonatomic,copy) NSAttributedString *attributedText;
// 文本颜色
@property(nullable, nonatomic,strong) UIColor *textColor;
// 文本字体
@property(nullable, nonatomic,strong) UIFont *font;
// 文本的对齐方式
@property(nonatomic) NSTextAlignment textAlignment;

// 占位文本,默认颜色是灰色
@property(nullable, nonatomic,copy) NSString *placeholder;
// 富文本占位文本
@property(nullable, nonatomic,copy) NSAttributedString *attributedPlaceholder;

// 编辑框中的内容密码显示,默认是NO
@property(nonatomic,getter=isSecureTextEntry) BOOL secureTextEntry; 
// 再次编辑前是否清空,默认是NO
@property(nonatomic) BOOL clearsOnBeginEditing;

// 背景图像
@property(nullable, nonatomic,strong) UIImage *background;
// 不能编辑时背景图像
@property(nullable, nonatomic,strong) UIImage *disabledBackground;

// 边框样式,默认是UITextBorderStyleNone
@property(nonatomic) UITextBorderStyle borderStyle;
// 设置清除按钮的模式,默认是UITextFieldViewModeNever
@property(nonatomic) UITextFieldViewMode clearButtonMode;
// 文本是否自动缩小以适应文本窗口大小,默认是NO
@property(nonatomic) BOOL adjustsFontSizeToFitWidth;
// 设置字段文本adjustsFontSizeToFitWidth为YES时最小字体大小
@property(nonatomic) CGFloat minimumFontSize;

// 自动大写样式适用于键入的文本 
@property(nonatomic) UITextAutocapitalizationType autocapitalizationType;
// 文本字段的自动纠正行为
@property(nonatomic) UITextAutocorrectionType autocorrectionType;
// 文本字段的拼写检查行为
@property(nonatomic) UITextSpellCheckingType spellCheckingType;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

borderStyle样式

typedef NS_ENUM(NSInteger, UITextBorderStyle) {
    UITextBorderStyleNone,  // 默认样式,文本字段不显示边框
    UITextBorderStyleLine,  // 显示一个细长的矩形
    UITextBorderStyleBezel,  // 显示文本字段的边框样式
    UITextBorderStyleRoundedRect  // 显示文本字段的圆角样式边框
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

显示如下
在这里插入图片描述
clearButtonMode样式

typedef NS_ENUM(NSInteger, UITextFieldViewMode) {
    UITextFieldViewModeNever,          // 重不出现
    UITextFieldViewModeWhileEditing,   // 编辑时出现
    UITextFieldViewModeUnlessEditing,  // 除了编辑外都出现
    UITextFieldViewModeAlways          // 一直出现
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

spellCheckingType样式

typedef NS_ENUM(NSInteger, UITextSpellCheckingType) {
    UITextSpellCheckingTypeDefault,  // 默认
    UITextSpellCheckingTypeNo,       // 不启用拼写检查
    UITextSpellCheckingTypeYes,      // 启用拼写检查
};
  • 1
  • 2
  • 3
  • 4
  • 5

autocorrectionType样式

typedef NS_ENUM(NSInteger, UITextAutocorrectionType) {
    UITextAutocorrectionTypeDefault,  // 默认
    UITextAutocorrectionTypeNo,       // 不自动纠错
    UITextAutocorrectionTypeYes,      //  自动纠错
};
  • 1
  • 2
  • 3
  • 4
  • 5

autocapitalizationType样式

typedef NS_ENUM(NSInteger, UITextAutocapitalizationType) {
    UITextAutocapitalizationTypeNone,           // 不自动大写
    UITextAutocapitalizationTypeWords,          // 单词首字母大写
    UITextAutocapitalizationTypeSentences,      // 句子首字母大写
    UITextAutocapitalizationTypeAllCharacters,  // 所有字母都大写
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2. UITextField键盘设置

// 键盘类型
@property(nonatomic) UIKeyboardType keyboardType;
// 键盘的视觉样式
@property(nonatomic) UIKeyboardAppearance keyboardAppearance; 
// 键盘上返回键的类型
@property(nonatomic) UIReturnKeyType returnKeyType;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

keyboardType样式

typedef NS_ENUM(NSInteger, UIKeyboardType) {
    UIKeyboardTypeDefault,                // 默认键盘
    UIKeyboardTypeASCIICapable,           // 显示标准ASCII字符的键盘
    UIKeyboardTypeNumbersAndPunctuation,  // 显示数字和标点键盘
    UIKeyboardTypeURL,                    // 显示为URL输入优化的键盘
    UIKeyboardTypeNumberPad,              // 显示数字小键盘
    UIKeyboardTypePhonePad,               // 显示电话号码的键盘
    UIKeyboardTypeNamePhonePad,           //
    UIKeyboardTypeEmailAddress,           // 显示为输入电子邮件输入优化的键盘
    UIKeyboardTypeDecimalPad,             // 显示带有数字和小数点的键盘
    UIKeyboardTypeTwitter,                // 显示针对Twitter输入优化的键盘
    UIKeyboardTypeWebSearch,              // 显示针对网页搜索输入优化的键盘
    UIKeyboardTypeASCIICapableNumberPad,  // 显示只输入ASCII数字的数字键盘
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

returnKeyType样式

typedef NS_ENUM(NSInteger, UIReturnKeyType) {
    UIReturnKeyDefault,        // 默认,标有Return按钮
    UIReturnKeyGo,             // 标有Go按钮
    UIReturnKeyGoogle,         // 标有Google按钮,用于搜索
    UIReturnKeyJoin,           // 标有Join按钮
    UIReturnKeyNext,           // 标有Next按钮
    UIReturnKeyRoute,          // 标有Route按钮
    UIReturnKeySearch,         // 标有Search按钮
    UIReturnKeySend,           // 标有Send按钮
    UIReturnKeyYahoo,          // 标有Yahoo按钮,用于搜索
    UIReturnKeyDone,           // 标有Done按钮
    UIReturnKeyEmergencyCall,  // 紧急呼叫按钮
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

keyboardAppearance

typedef NS_ENUM(NSInteger, UIKeyboardAppearance) {
    UIKeyboardAppearanceDefault,  // 默认外观键盘
    UIKeyboardAppearanceDark,     // 适合黑暗外观
    UIKeyboardAppearanceLight     // 适合白色外观
};
  • 1
  • 2
  • 3
  • 4
  • 5

3. UITextFieldDelegate代理设置

UITextFieldDelegate的方法

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {  
    // 返回一个BOOL值,指定是否开始编辑
    return YES;
}  

- (void)textFieldDidBeginEditing :(UITextField *)textField {
    // 开始编辑,UITextField将成为first responder
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    // 返回BOOL值,指定是否允许结束编辑,当编辑结束,文本字段会让出first responder
    // 想在阻止可以返回NO
    return NO;
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersIn Range:(NSRange)range replacementString:(NSString *)string {
    // 使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。
    // 可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。    
    // 要防止文字被改变可以返回NO
    return YES;
}

- (BOOL)textFieldShouldClear:(UITextField *)textField {
    // 返回一个BOOL值指明是否允许根据用户请求清除内容
    // 可以设置在特定条件下才允许清除内容
    return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    // 返回一个BOOL值,指明是否允许在按下回车键时结束编辑
    // 如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起
    [textField resignFirstResponder];
    return YES;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

iOS在默认情况下点击输入框会弹出键盘,但必须实现textFieldShouldReturn:(UITextField *)方法里才可以收键盘。可以实现点击键盘以外的空白区域来实现收键盘的功能。

  • 覆盖ViewtouchesBegan:(NSSet<UITouch *> *) withEvent:(UIEvent *):触摸事件来实现
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {  
        if (self.textField) {
            [self.textField resignFirstResponder];
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 创建自定义的触摸手势来实现
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(keyboardHide:)];
        // 设置成NO表示当前控件响应后会传播到其他控件上,默认为YES。
        tapGestureRecognizer.cancelsTouchesInView = NO;
        // 将触摸事件添加到当前view
        [self.view addGestureRecognizer:tapGestureRecognizer];
    }
    
    - (void)keyboardHide:(UITapGestureRecognizer *)tap {
        if (self.textField) {
            [self.textField resignFirstResponder];
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

4. 底部UITextField被软键盘遮挡问题

UITextField使用键盘输入文字时,会发出通知

UIKeyboardWillShowNotification   //键盘显示之前发送
UIKeyboardDidShowNotification    //键盘显示之后发送
UIKeyboardWillHideNotification   //键盘隐藏之前发送
UIKeyboardDidHideNotification    //键盘隐藏之后发送
  • 1
  • 2
  • 3
  • 4

如果UITextField位于界面底部,软键盘会遮挡UITextField
在这里插入图片描述
我们需要将整个界面往上移动,编辑结束后恢复整个界面。

// 添加软键盘通知监听
- (void)viewDidLoad {
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)keyboardWillShow:(NSNotification *)notification {
    // 获取键盘位置
    NSDictionary *userinfo = [notification userInfo];
    NSValue *value = [userinfo objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardFrame = [value CGRectValue];

    // 输入框与键盘的位置
    CGFloat bottomHeight = self.view.frame.size.height - CGRectGetMaxY(self.textField.frame);
    CGFloat distance = bottomHeight - 5.0 - keyboardFrame.size.height;

    if (distance < 0) {
        self.move = TRUE;
        [UIView animateWithDuration:1.0 animations:^{
            //将视图的Y坐标向上移动offset个单位,以使下面腾出地方用于软键盘的显示
            self.view.frame = CGRectMake(0.0f, distance, self.view.frame.size.width, self.view.frame.size.height);
        }];
    }
}

- (void)keyboardWillHide:(NSNotification *)notification {
    if (self.move) {
        self.move = FALSE;
        [UIView animateWithDuration:1.0 animations:^{
            self.view.frame = CGRectMake(0.0f, 0, self.view.frame.size.width, self.view.frame.size.height);
        }];
    }
}

// 获取当前输入框
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    self.textField = textField;
    return TRUE;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

显示如下
在这里插入图片描述

相关文章
iOS UITextView控件
iOS UITextField控件

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/322097
推荐阅读
相关标签
  

闽ICP备14008679号