美文网首页
OC内容输入篇(二)UITextField

OC内容输入篇(二)UITextField

作者: oceanfive | 来源:发表于2018-08-11 14:42 被阅读68次

[TOC]

常用属性,参考 UILabel

@property(nullable, nonatomic,copy)   NSString *text; // default is nil
@property(nullable, nonatomic,copy)   NSAttributedString  *attributedText NS_AVAILABLE_IOS(6_0); // default is nil
@property(nullable, nonatomic,strong) UIColor*textColor;  // default is nil. use opaque black
@property(nullable, nonatomic,strong) UIFont *font;  // default is nil. use system font 12 pt
@property(nonatomic)  NSTextAlignment textAlignment;  // default is NSLeftTextAlignment

边框border

@property(nonatomic)        UITextBorderStyle       borderStyle;

边框样式,默认是 UITextBorderStyleNone, 取值有:

  • UITextBorderStyleNone : 没有边框效果
  • UITextBorderStyleLine : 线
  • UITextBorderStyleBezel : 斜面,感觉和 line 类似
  • UITextBorderStyleRoundedRect : 四周是圆角

设置了 borderStylebackgrounddisabledBackground会无效
包含rightView,不包含leftView

整个的文字属性 defaultTextAttributes

@property(nonatomic,copy)   NSDictionary<NSString *, id>           *defaultTextAttributes NS_AVAILABLE_IOS(7_0);

设置的值参考 NSAttributedString

一些常用的属性比如fonttextColor有快捷方式设置,对于一些其他的属性(比如下滑线,背景色下划线等等),可以使用defaultTextAttributes进行设置

占位字符

@property(nullable, nonatomic,copy) NSString  *placeholder;          // default is nil. string is drawn 70% gray
@property(nullable, nonatomic,copy)   NSAttributedString  *attributedPlaceholder NS_AVAILABLE_IOS(6_0); // default is nil

输入内容的属性控制

@property(nonatomic, copy) NSDictionary<NSString *,id> *typingAttributes
  • typingAttributes : 用来控制输入的时候,输入的文字的属性,比如斜体,下划线等等;The attributes to apply to new text being entered by the user.

  • 如果选中了或者选中范围发生变化,属性会被清空nil ;
  • 只能在编辑中的状态进行属性赋值和读取,不在编辑中的状态获取到的内容为nil;

清除内容

@property(nonatomic) BOOL  clearsOnBeginEditing; // default is NO which moves cursor to location clicked. if YES, all text cleared

@property(nonatomic)        UITextFieldViewMode  clearButtonMode; // sets when the clear button shows up. default is UITextFieldViewModeNever

@property(nonatomic) BOOL clearsOnInsertion NS_AVAILABLE_IOS(6_0); // defaults to NO. if YES, the selection UI is hidden, and inserting text will replace the contents of the field. changing the selection will automatically set this to NO.
  • clearsOnBeginEditing:

    • YES: 在开始编辑的时候就清除内容
    • NO: 光标移动到内容的最后一位
  • clearButtonMode: 清除按钮的显示模式

    • UITextFieldViewModeNever
    • UITextFieldViewModeWhileEditing
    • UITextFieldViewModeUnlessEditing
    • UITextFieldViewModeAlways

自动调整

@property(nonatomic)        BOOL                    adjustsFontSizeToFitWidth; // default is NO. if YES, text will shrink to minFontSize along baseline
@property(nonatomic)        CGFloat                 minimumFontSize;      // default is 0.0. actual min may be pinned to something readable. used if adjustsFontSizeToFitWidth is YES

背景图片

@property(nullable, nonatomic,strong) UIImage                *background;           // default is nil. draw in border rect. image should be stretchable
@property(nullable, nonatomic,strong) UIImage                *disabledBackground;   // default is nil. ignored if background not set. image should be stretchable

background上、右、下有间距;

enabled 取值:

  • YES: 显示的是 background
  • NO: 显示的是 disabledBackground
UITextField_background.png

禁止编辑

一、enabled属性值设置为 NO

二、代理方法返回NO

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    return NO;
}

// 编辑中的判断方法
@property(nonatomic,readonly,getter=isEditing) BOOL editing;

// 是否允许编辑富文本内容
@property(nonatomic) BOOL allowsEditingTextAttributes NS_AVAILABLE_IOS(6_0); // default is NO. allows editing text attributes with style operations and pasting rich text
  • allowsEditingTextAttributes : 会有加粗bold斜体italic下划线underline的操作

- (BOOL)endEditing:(BOOL)force;    // use to make the view or any subview that is the first responder resign (optionally force)
  • 结束编辑状态

左侧/右侧附加内容

@property(nullable, nonatomic,strong) UIView *leftView;        // e.g. magnifying glass
@property(nonatomic)        UITextFieldViewMode  leftViewMode;    // sets when the left view shows up. default is UITextFieldViewModeNever

@property(nullable, nonatomic,strong) UIView              *rightView;       // e.g. bookmarks button
@property(nonatomic)        UITextFieldViewMode  rightViewMode;   // sets when the right view shows up. default is UITextFieldViewModeNever

包含了rightView,但是不包含leftView

leftView和rightView.png

代理方法

// 一、允许编辑判断 ---------------------
// 返回 YES : 可以编辑; NO: 不可以编辑,输入
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField;

// 二、编辑中 ---------------------
// 开始编辑,弹出了键盘
- (void)textFieldDidBeginEditing:(UITextField *)textField;

// 是否允许输入;YES:可以输入;NO:不可以输入;
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;

// 点击“右边”的“清除按钮”,YES:清除内容;NO:不会清除内容
- (BOOL)textFieldShouldClear:(UITextField *)textField;

// 点击 `return` 键的处理
- (BOOL)textFieldShouldReturn:(UITextField *)textField;

// 三、结束编辑判断-------------
// 返回YES,允许结束编辑;返回NO,不允许结束编辑
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField;

// 四、结束编辑------------
// 已经结束编辑了
- (void)textFieldDidEndEditing:(UITextField *)textField;

// 10.0 之后调用,结束编辑了
//- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason NS_AVAILABLE_IOS(10_0);

不点击删除键的方法调用顺序如下:

-[ThreeViewController textFieldShouldBeginEditing:]
-[ThreeViewController textFieldDidBeginEditing:]
-[ThreeViewController textField:shouldChangeCharactersInRange:replacementString:]
-[ThreeViewController textFieldShouldReturn:]
-[ThreeViewController textFieldShouldEndEditing:]
-[ThreeViewController textFieldDidEndEditing:reason:]

通知方法

UIKIT_EXTERN NSNotificationName const UITextFieldTextDidBeginEditingNotification;
UIKIT_EXTERN NSNotificationName const UITextFieldTextDidEndEditingNotification;
UIKIT_EXTERN NSNotificationName const UITextFieldTextDidChangeNotification;

UIKIT_EXTERN NSString *const UITextFieldDidEndEditingReasonKey NS_AVAILABLE_IOS(10_0);

小结:

  • defaultTextAttributes: 是显示的文字内容的属性,(之前可能就存在内容了)
  • typingAttributes: 是输入的内容的属性
  • markedTextStyle: 临时的,用户还没有确定输入的内容的属性

最后

GitHub参考链接

相关文章

网友评论

      本文标题:OC内容输入篇(二)UITextField

      本文链接:https://www.haomeiwen.com/subject/qtddbftx.html