Swift устанавливает шрифт textview программно только для нового текста, набирается не весь текст - PullRequest
1 голос
/ 14 июня 2019

Я использую UIKeyCommands, чтобы позволить пользователям с Bluetooth-клавиатурой использовать 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
        }
...