gpt4 book ai didi

ios - 将 NSMutableAttributedString 添加到 TextField

转载 作者:行者123 更新时间:2023-11-29 11:44:06 42 4
gpt4 key购买 nike

我有一个自定义的 UITextfield,当用户完成输入时我想要它,必须在不同大小的文本开头添加一个小的“R$”。

我这样调用添加“R$”的方法:

self.addTarget(self, action: #selector(setCurrencyLabelPosition), for: .editingDidEnd)

然后我尝试像这样更改属性和内容:

 func setCurrencyLabelPosition(){

let fullText:String = "R$\((self.text)!)"
self.text = fullText
var attribute:NSMutableAttributedString = NSMutableAttributedString(attributedString:self.attributedText!)
attribute.addAttribute(NSFontAttributeName, value:UIFont.systemFont(ofSize: 12), range: NSRange(location: 0, length: 2))
self.attributedText = attribute

}

此文本字段的原始文本设置为 40.0 大小,我只希望“R$”的大小为 12.0

我面临的问题是整个文本的大小为 40.0它打印“R$”但大小为 40。

是否可以使用 NSMutableAttributedString 做我想做的事情?

最佳答案

我一直在研究你的问题,我认为 UITextField 中有一个错误,因为如果你将字体修改为更大的字体它可以工作但是如果你这样做但对于小字体那么不要工作。

我做了一个自定义类并添加了一些可自定义的 Inspectable 属性,希望这最终能帮助到你

看起来是这样的,注意:故障是因为我的 gif 转换器 enter image description here

import UIKit

@IBDesignable
class CustomTextField: UITextField {

@IBInspectable var prefix : String = ""
@IBInspectable var removePrefixOnEditing : Bool = true

override init(frame: CGRect) {
super.init(frame: frame)
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

override func awakeFromNib() {
super.awakeFromNib()
self.addTarget(self, action: #selector(setCurrencyLabelPosition), for: .editingDidEnd)
self.addTarget(self, action: #selector(removePrefix), for: .editingDidBegin)
}

func removePrefix(){
if self.attributedText != nil
{
if(self.removePrefixOnEditing)
{
self.defaultTextAttributes = [NSFontAttributeName : UIFont.systemFont(ofSize: 20)]
let prefixRange = NSString(string: (self.attributedText?.string)!).range(of: prefix)
if(prefixRange.location != NSNotFound)
{
self.attributedText = NSAttributedString(string: (self.attributedText?.string.replacingOccurrences(of: prefix, with: ""))!, attributes: self.defaultTextAttributes)
}
}
}
}

func setCurrencyLabelPosition(){

if self.attributedText != nil
{
var fullText:String = "\((self.attributedText?.string)!)"
if(NSString(string: (self.attributedText?.string)!).range(of: prefix).location == NSNotFound)
{
fullText = "\(prefix)\((self.attributedText?.string)!)"
}
//hacky part, seems to be a bug in UITextField
self.defaultTextAttributes = [NSFontAttributeName : UIFont.systemFont(ofSize: 10)]
self.attributedText = NSAttributedString(attributedString: self.changeFontForText(originalText: fullText, text: prefix, basicFont: UIFont.systemFont(ofSize: 20), newFont: UIFont.systemFont(ofSize: 12)))
}
}

func changeFontForText(originalText:String,text:String,basicFont:UIFont, newFont:UIFont) -> NSMutableAttributedString
{
let resultAttributedString = NSMutableAttributedString(string: originalText, attributes: [NSFontAttributeName : basicFont])
let range = NSString(string: originalText).range(of: text)
if(range.location != NSNotFound)
{
resultAttributedString.setAttributes([NSFontAttributeName:newFont], range: range)
}

return resultAttributedString
}

}

希望对你有帮助

关于ios - 将 NSMutableAttributedString 添加到 TextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44909730/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com