我目前正在开发一个笔记应用程序,我有一个UITextField。当你选择文本有一个弹出窗口,你可以格式化文本(见截图)。我想有通过按钮的功能。
因此,我有一个UIText字段,用户在其中键入内容,然后我有一个按钮,显示为粗体,如果用户单击它,则接下来的文本应该是粗体,只要启用了该按钮。
我的问题是“旧”文本总是加粗。这是我目前的解决方案:
var isBoldEnabled = false
override func viewDidLoad() {
super.viewDidLoad()
// Set the initial font for the text field
textField.font = UIFont.systemFont(ofSize: 16)
}
@IBAction func boldButtonTapped(_ sender: Any) {
// Toggle the isBoldEnabled variable
isBoldEnabled = !isBoldEnabled
// Create a new attributed string with the existing text and the current font
let attributedString = NSMutableAttributedString(string: textField.text ?? "")
let attributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.font: textField.font as Any]
attributedString.addAttributes(attributes, range: NSRange(location: 0, length: attributedString.length))
// If the bold button is enabled, add the bold font attribute for the selected text
if isBoldEnabled {
let boldAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: textField.font!.pointSize) as Any]
let selectedRange = textField.selectedTextRange
if selectedRange != nil {
let range = textField.selectedRange
attributedString.addAttributes(boldAttributes, range: NSRange(location: range.location, length: range.length))
}
}
// Set the attributed text to the text field
textField.attributedText = attributedString
}
有没有人有更好的方法,如何才能启用这个功能,只需改变即将到来的打字?感谢所有
2条答案
按热度按时间ukdjmx9f1#
取决于你想做多少...
对于复杂的、功能齐全的"富文本编辑",我建议搜索已经构建的解决方案--有很多开源的解决方案。如果你不能找到一个完全满足你需要的解决方案,我相信你可以找到一个足够接近的解决方案,你可以浏览代码并编辑它以满足你的需要。
对于一个相当简单的实现,您可以设置文本字段的
.typingAttributes
-参见Apple的docs。这里有一个非常简单的例子:
看起来像这样:
轻触开关以启用粗体"On",然后再键入一些内容:
关闭粗体并输入更多内容:
pftdvrlh2#
当你试图“取消粗体”你的文本,你设置默认字体属性字符串作为字体从你的文本字段
以前设置为粗体
因此,将代码更改为