Как вызвать событие, когда текст выделен в Swift - PullRequest
0 голосов
/ 14 мая 2019

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

Я гуглил это часами и ничего

//
//  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)
        }
    }


}

Мне нужна коробка с кнопкой после выделения любого текста.

1 Ответ

0 голосов
/ 14 мая 2019

Предполагая, что вы спрашиваете, как получить событие, когда выбор изменяется в UITextField, вам необходимо добавить наблюдателя в свойство selectedTextRange UITextField (из протокола 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")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...