如何在swift中突出显示文本时触发事件
Posted
技术标签:
【中文标题】如何在swift中突出显示文本时触发事件【英文标题】:How to trigger an event when text is highlighted in swift 【发布时间】:2019-05-13 21:25:04 【问题描述】:我想制作一个图书应用程序,用户可以在其中阅读其中的章节。我想添加一个功能,用户可以在其中突出显示文本并将其保留在应用程序中以供将来参考。快速选择文本后,如何触发事件(如带有突出显示图标的按钮)?请帮忙
我已经用谷歌搜索了好几个小时了,什么也没有
//
// ViewController.swift
// platesofned
//
// Created by Mauricio Kiyama on 5/13/19.
// Copyright © 2019 Mauricio Kiyama. All rights reserved.
//
import UIKit
class ViewController: UIViewController
let myTextView: UITextField =
let label = UITextField()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Hello World"
label.isSelected = true
label.textColor = .black
return label
()
override func viewDidLoad()
super.viewDidLoad()
view.addSubview(myTextView)
myTextView.widthAnchor.constraint(equalToConstant: 100).isActive = true
myTextView.heightAnchor.constraint(equalToConstant: 100).isActive = true
myTextView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
myTextView.topAnchor.constraint(equalTo: view.topAnchor, constant: 100).isActive = true
if let textRange = myTextView.selectedTextRange
let selectedText = myTextView.text(in: textRange)
print(selectedText)
我想要一个在选择任何文本后有按钮的框。
【问题讨论】:
也许这可以帮助***.com/questions/26454037/…,我真的想不出任何东西,也许如果你有更多的代码 你在说什么文字?在文本字段中?所以你想知道文本字段中的选择什么时候发生了变化? 不相关,但将文本字段属性命名为myTextView
而不是 myTextField
确实令人困惑。
【参考方案1】:
假设您询问如何在 UITextField 中的选择更改时获取事件,您需要将观察者添加到 UITextField
的“selectedTextRange”属性(来自 UITextInput
协议)。
这是一个小示例视图控制器,它为文本字段侦听此类事件:
class MyVC: UIViewController
var textField: UITextField!
@objc override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)
if keyPath == "selectedTextRange"
if let tf = object as? UITextField
// This is our event and text field
if let range = tf.selectedTextRange
print("Updated selection = \(range)")
return
// This isn't the event or the object we care about, pass it on
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
override func viewDidLoad()
super.viewDidLoad()
view.backgroundColor = .yellow
textField = UITextField(frame: CGRect(x: 0, y: 0, width: 300, height: 44))
textField.text = "Hello there. How are you?"
// Options is empty because we don't care about the old range and we can get the new range from the text field
textField.addObserver(self, forKeyPath: "selectedTextRange", options: [], context: nil)
view.addSubview(textField)
deinit
textField.removeObserver(self, forKeyPath: "selectedTextRange")
【讨论】:
以上是关于如何在swift中突出显示文本时触发事件的主要内容,如果未能解决你的问题,请参考以下文章
Swift 如何在另一个 UITextField 突出显示或具有值时禁用 TextField
在 Swift (tvOS) 中,如何更改 UIButton 的突出显示和焦点颜色?