我想在UITextField
placeHolder
文字之间添加空格。
func setTextFieldCharacterSpacing(txtField: TextFieldCustomize) {
let attributedString = NSMutableAttributedString(string: txtField.text!)
attributedString.addAttribute(NSAttributedStringKey.kern, value: CGFloat(8.0), range: NSRange(location: 0, length: attributedString.length))
txtField.attributedText = attributedString
}
修改1
我使用textField
delegate
方法完成了此操作。
extension LoginVC: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
CommonHelper.sharedInstance.setTextFieldCharacterSpacing(txtField: textField as! TextFieldCustomize)
return true
}
}
修改2
我有1 textField
个安全条目。当我在未应用的字符之间的textField
,txtField.attributedText
空格中键入任何内容时。
使用安全字段
这适用于Username
,但不适用于password
安全字段。
如何在安全条目textField
中的字符之间添加空格?
提前致谢。
答案 0 :(得分:1)
您的attirbutedString
代码没问题,您只是将其置于textField
的错误属性中。 attributedPlaceholder
是正确的。 attributedText
用于设置文本值而非占位符。
所以改变
txtField.attributedText = attributedString
到
textField.attributedPlaceholder = attributedString
以下是输出:
编辑:用户输入时
为textField
事件
editingDidChange
textField.addTarget(self, action: #selector(textFieldEdidtingDidChange(_ :)), for: UIControlEvents.editingChanged)
以下是用户输入时如何提供空间。
@objc func textFieldEdidtingDidChange(_ textField :UITextField) {
let attributedString = NSMutableAttributedString(string: textField.text!)
attributedString.addAttribute(NSAttributedStringKey.kern, value: CGFloat(8.0), range: NSRange(location: 0, length: attributedString.length))
textField.attributedText = attributedString
}
<强>输出:强>
编辑:2
在分析了@kuldeep提供的演示项目后,如果我们使用
secureTextEntry
(系统除外),customFont
似乎无效。我尝试使用systemFont
并且它可以工作,如果我们取消选中secureTextEntry
,它也适用于所有字体。
我不知道为什么在这种情况下间距不起作用,但我想出了以下解决方案:
我不会使用secureTextEntry
而是替换editingChange
事件中的所有字符。所以我创建了一个自定义类:
class PasswordField: TextFieldCustomize {
var originalText: String? /// Your original text
var customChar = "•" /// Custom character to replace with original character while typing
}
/// TextFieldCustomize is a custom class I found in demo project.
以下是editingChange:
@objc func textFieldEdidtingDidChange(_ textField :UITextField) {
var string = textField.text;
if let passwordField = textField as? PasswordField {
/// Replace all the characters by custom character •
var newString = ""
let count = string?.characters.count ?? 0
for i in 0..<count {
if i == count - 1 {
let lastChar = string!.characters.last!
newString.append(lastChar)
}
else {
newString.append(passwordField.customChar)
}
}
string = newString
/// This will be your original text, So use passwordField.originalText instead of passwordField.text when needed
passwordField.originalText = textField.text
}
let attributedString = NSMutableAttributedString(string: string!)
attributedString.addAttribute(NSAttributedStringKey.kern, value: CGFloat(8.0), range: NSRange(location: 0, length: attributedString.length))
textField.attributedText = attributedString
}
答案 1 :(得分:1)
对于占位符,您应该这样做,
let attributedString = NSMutableAttributedString(string: txtField.placeholder!)
attributedString.addAttribute(NSAttributedStringKey.kern, value: CGFloat(8.0), range: NSRange(location: 0, length: attributedString.length))
txtField.attributedPlaceholder = attributedString
如果您尚未在storyboard
中设置占位符文字,那么您还应在调用上述代码段之前设置其值,
txtField.placeholder = "Developer"
答案 2 :(得分:0)
如果你想在TextField中使用左边填充只是使用下面的代码,它会在左边添加填充以及占位符和文本
txtField.layer.sublayerTransform = CATransform3DMakeTranslation(5, 0, 0);
您可以通过更改第一个参数的值来更改左边距的数量。
如果您想在字符之间留出空格,为什么不使用attributedPlaceholder
属性?我使用attributedPlaceholder
尝试了您的代码,效果非常好。
let attributedString = NSMutableAttributedString(string: "Developer")
attributedString.addAttribute(NSAttributedStringKey.kern, value: CGFloat(8.0), range: NSRange(location: 0, length: attributedString.length))
txtField.attributedPlaceholder = attributedString