一、需求
近期需要实现类似微信提现界面的功能,在输入提现金额用到UITextField控件来实现,需求是:
1,在没有输入金额时,默认展示字体较小的占位字符,有输入金额时,显示正常大小的金额,且占位字符要垂直居中显示。
2,用户把所有字符删除完时,要回到展示字体较小的占位字符,且占位字符要垂直居中显示。
3,用户点右侧的清除按钮清空所有内容时,要回到展示字体较小的占位字符,且占位字符要垂直居中显示。
二、实现
1,要自定义占位字符串,就得用到UITextField的attributedPlaceholder属性:
@property(nullable, nonatomic, copy) NSAttributedString *attributedPlaceholder NS_AVAILABLE_IOS(6_0); // default is nil
这里可以自定义文字字符的字体样式、文字颜色、文字段落样式等,可以参考NSAttributedString.h文件中的文字字符属性参数定义。这里主要说一下垂直居中,要实现垂直居中就得使用到段落样式属性 NSParagraphStyleAttributeName。
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
// 通过最小的行高来控制文字字符垂直居中,注意,文字字符垂直方向默认是底部对齐,所以你不能让它直接等于youTextFeild的行高,通过这种简单计算可以控制文字字符垂直居中显示。
style.minimumLineHeight = self.youTextFeild.font.lineHeight - (self.youTextFeild.font.lineHeight - [UIFont systemFontOfSize:16].lineHeight) * 0.5;
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:@"请输入提现金额" attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:16], NSParagraphStyleAttributeName : style}];
下面分享一点小知识:
当我们设置UITextField的属性secureTextEntry = YES的时候,有一个特殊的附加功能,就是当我们在输入这种设置类型的TextField的时候,切换到别的输入框后,在回来当前的这个输入框进行输入的时候,就会把当前输入框的值清空,重新输入。
效果图.gif
网友评论