首页 > 解决方案 > Swift 以编程方式设置 textview 字体仅适用于键入的新文本而不是所有文本

问题描述

UIKeyCommands用来允许使用蓝牙键盘的用户使用CMD + B粗体和CMD + I斜体。

我在这里成功地做到了这一点......

@objc func boldText() {
        textViewOutlet.font = UIFont(name:"Avenir-Heavy", size: 16)
    }
    @objc func italicText() {
        textViewOutlet.font = UIFont(name:"AvenirNext-Italic", size: 16)
    }

    // enable functions

    override var keyCommands: [UIKeyCommand]? {
        return [
            UIKeyCommand(input: "b", modifierFlags: .command, action: #selector(boldText), discoverabilityTitle: "Bold"),
            UIKeyCommand(input: "i", modifierFlags: .command, action: #selector(italicText), discoverabilityTitle: "Italic")
        ]
    }

但是,当我使用这些键盘命令时,它现在将整个文本视图更改为粗体或斜体,而不是仅再次“解除”在粗体或斜体之前键入的文本。

非常感谢任何帮助!

我想我需要类似的东西:

@objc func italicText() {
    textViewOutlet.font.FROMTHECURRENTLOCATION UNTIL IT'S DISENGAGED = UIFont(name:"AvenirNext-Italic", size: 16)
}

编辑 :

在进一步研究这一点时,我发现有一种我认为可以使用的称为类型属性的方法。这个答案的一些细节

我试过这个:

 @objc func boldText() {
        textViewOutlet.typingAttributes = UIFont(name:"Avenir-Heavy", size: 16)
    }

但我认为我的方法不正确。有谁知道如何使用 typingAttributes 设置字体?

更新 :

我通过使用 .typingattributes 并在此处调整答案解决了这个问题。

您可以使用以下命令实现用户在按下文本时将文本设为粗体/斜体/不同颜色等的功能:

@objc func boldText() {
        let makeBold: [String : Any] = [
            NSAttributedStringKey.font.rawValue:  UIFont(name: "Avenir-Heavy", size: 15.0)!
        ]
        textViewOutlet.typingAttributes = makeBold
        }

标签: swiftuikeycommand

解决方案


推荐阅读