Вкл. viewDidLoad()
убедитесь, что вы добавили textView.delegate = self
.Также в вашем классе унаследуйте от UITextViewDelegate
.
Затем позвоните вашему selectText()
в textViewDidChangeSelection(_:)
func textViewDidChangeSelection(_ textView: UITextView) {
selectText()
}
И он будет работать правильно.
РЕДАКТИРОВАТЬ Обычно это должно работать, даже когда вы вызываете ваш selectText()
внутри действия кнопки.Но так как он не работает, давайте сделаем обходной путь: объявите var selectedRange: NSRange?
в вашем классе.
Затем в
func textViewDidChangeSelection(_ textView: UITextView) {
selectedRange = textView.selectedRange
}
И в вашем selectText()
сделайте это
func selectText() {
if let textRange = selectedRange {
let attributes = [NSAttributedString.Key.font: UIFont(name: "Arial", size: 18.0)]
textView.textStorage.addAttributes(attributes as [NSAttributedString.Key : Any], range: textRange)
}
}
РЕДАКТИРОВАТЬ для AccessoryView
Обновите ваш KeyboardAccessory:
class KeyboardAccessory: UIView {
var boldAction: (() -> Void)? // This is a closure, give it a read after making your button work
@IBAction func boldButtonTapped(_ sender: Any) {
print("boldButtonTapped -> Sending to bold()")
boldAction?()
}
}
Попробуйте преобразовать загруженный кончик в KeyboardAccessory и получите доступ к своему действию следующим образом:
override func viewDidLoad() {
super.viewDidLoad()
var keyboardAccessory = Bundle.main.loadNibNamed("KeyboardAccessory", owner: self, options: nil)?.first as! KeyboardAccessory?
keyboardAccessory.boldAction = { [weak self] in // to avoid retain cycles, read also about these
self?.selectText()
}
textView.inputAccessoryView = keyboardAccessory
}