textView通过选择器设置选中之后文字和字体颜色改变
时间: 2023-09-12 17:12:53 浏览: 62
您可以使用 `UITextViewDelegate` 中的 `textViewDidChangeSelection` 方法来实现通过选择器(`UIPickerView`)选择颜色和字体大小后,选中文本后文字和字体颜色的改变。
首先,您需要创建一个 `UIPickerView` 并将其作为 `UITextView` 的 inputView,以便用户可以在选择器中选择颜色和字体大小。具体做法如下:
```swift
// 创建一个 UIPickerView
let pickerView = UIPickerView()
pickerView.delegate = self
pickerView.dataSource = self
// 将 pickerView 设置为 textView 的 inputView
yourTextView.inputView = pickerView
```
然后,您需要在 `UITextViewDelegate` 中的 `textViewDidChangeSelection` 方法中获取所选文本的范围,并将选定的文本的颜色和字体属性设置为选择器中选择的值。具体实现代码如下:
```swift
func textViewDidChangeSelection(_ textView: UITextView) {
let selectedRange = textView.selectedRange
let attributedText = NSMutableAttributedString(attributedString: textView.attributedText)
attributedText.addAttribute(.foregroundColor, value: selectedColor, range: selectedRange)
attributedText.addAttribute(.font, value: selectedFont, range: selectedRange)
textView.attributedText = attributedText
}
```
其中,`selectedColor` 和 `selectedFont` 分别是从选择器中获取的颜色和字体大小。
最后,您需要实现 `UIPickerViewDelegate` 和 `UIPickerViewDataSource` 协议中的方法来设置选择器的选项和响应选择器的选择事件。具体实现代码如下:
```swift
// 实现 UIPickerViewDataSource 协议中的方法
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 2
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if component == 0 {
return colors.count
} else {
return fontSizes.count
}
}
// 实现 UIPickerViewDelegate 协议中的方法
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if component == 0 {
return colors[row]
} else {
return fontSizes[row]
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if component == 0 {
selectedColor = UIColor(named: colors[row]) ?? .black
} else {
selectedFont = UIFont.systemFont(ofSize: CGFloat(fontSizes[row])) ?? UIFont.systemFont(ofSize: 16)
}
}
```
其中,`colors` 和 `fontSizes` 是您自定义的颜色和字体大小选项数组,`selectedColor` 和 `selectedFont` 是您用来存储所选颜色和字体大小的变量。
这样,当用户选中文本后,就可以通过选择器来改变选中文本的颜色和字体大小了。