Быстрый обычный и жирный шрифт вместе в textview

#swift #fonts #uitextfield #uitextview

#swift #шрифты #uitextfield #uitextview

Вопрос:

Я пытаюсь использовать обычный и жирный шрифт вместе в textview. Когда пользователь вводит, пользователь может ввести обычный шрифт или (есть кнопка для ввода жирного шрифта) пользователь может нажать кнопку, чтобы ввести жирный шрифт. Как пользователь может вводить обычный и жирный шрифт в одном и том же textview? Какой метод я могу использовать для этого?

Это то, что я хочу: пример

Это мой код:

 func textViewDidChangeSelection(_ textView: UITextView) {
    
    var partOne = NSMutableAttributedString()
    var partTwo = NSMutableAttributedString()
    
    let boldFontAttributes: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.black, .font: UIFont.boldSystemFont(ofSize: 17)]
    let normalFontAttributes: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.darkGray, .font: UIFont.systemFont(ofSize: 15)]
    let combination = NSMutableAttributedString()
    
    if boldButtonTap == false {
        partOne = NSMutableAttributedString(string: textView.text, attributes: normalFontAttributes)  
    } else {
        partTwo = NSMutableAttributedString(string: textView.text, attributes: boldFontAttributes)    
    }
    combination.append(partOne)
    combination.append(partTwo)
    textView.attributedText = combination
}
  

Комментарии:

1. Если у вас возникли проблемы с этим, представьте, что вы пытаетесь установить для него полужирный и курсивный одновременно. Кстати, это не служба написания кода. Вы должны приложить минимальные усилия, иначе это будет выглядеть так, как будто вы просите нас сделать домашнее задание. Пожалуйста, отредактируйте свой вопрос, покажите, что вы пробовали, и с какими проблемами вы столкнулись.

Ответ №1:

Вам нужно использовать свойство текстового поля attributedText , чтобы установить его содержимое в виде стилизованного текста. (Свойство attributedText принимает значения типа NSAttributedString Создание текстового редактора, который позволяет пользователю применять стили к содержимому текстового представления, является большой задачей и выходит за рамки ответа SO.

(Обратите внимание, что UITextField также имеет подобные свойства typingAttributes , позволяющие изменять атрибуты, используемые для ввода нового текста. Вы можете использовать это, если пользователь устанавливает шрифт на жирный шрифт перед вводом нового текста.)

Комментарии:

1. Спасибо за ваше объяснение, Дункан. Как я могу изменить атрибуты, используемые для ввода нового текста?

2. Установив typingAttributes , как уже упоминалось.

Ответ №2:

 var normalText = "normal text" 
var boldText  = "bold text" 
var attributedString = NSMutableAttributedString(string:normalText)
let textField = UITextField()

var attrs = [NSAttributedString.Key.font : UIFontDescriptor.SymbolicTraits.contains(.traitBold)]
var boldString = NSMutableAttributedString(string: boldText, attributes:attrs)

attributedString.append(boldString)

// for normal text
textField.text = normalText
// for normal text with bold
textField.attributedText = attributedString
  

Комментарии:

1. Даже если предположить, что результат близок к тому, о чем спрашивается, вы должны установить шрифт с symbolictraits .traitBold вместо того, чтобы просто использовать жирный системный шрифт.

2. Вы проверили свой код? Не похоже, что contains возвращает шрифт