UIPasteboard возвращает предыдущий элемент - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть следующий код:

[[UIApplication sharedApplication] sendAction:@selector(copy:) to:nil from:self forEvent:nil];
NSString *string =  [UIPasteboard generalPasteboard].string;

Проблема в том, что монтажный щит возвращает то, что я скопировал ранее, а не сейчас. Каким-то образом он висит на предыдущем элементе, который я скопировал и возвратил, а затем в следующий раз я получаю элемент, который хотел и скопировал ... странное поведение ... есть идеи?

Редактировать

У меня есть решение с использованием наблюдателя, но я не уверен, насколько это элегантно ... кажется, что есть некоторая задержка между копированием и установкой элемента ... достаточно, чтобы он не был установлен и для предыдущий будет все еще на UIPasteBoard.

1 Ответ

0 голосов
/ 21 апреля 2020

Я составил небольшой пример для вашего кода для поведения копирования / вставки, и он работает должным образом: выбранный текст печатается в консоли после нажатия на кнопку.

class ViewController: UIViewController {

let textField = UITextField()
let copyButton = UIButton(type: .roundedRect)

@objc func copySelectedText() {

    UIApplication.shared.sendAction(#selector(UIResponder.copy(_:)), to: nil, from: self, for: nil)
    let copiedString = UIPasteboard.general.string

    print(copiedString)
}

override func viewDidLoad() {
    super.viewDidLoad()

    textField.borderStyle = .roundedRect
    view.backgroundColor = .darkGray
    display(textField, copyButton)

    copyButton.setTitle("tap to copy selected text", for: .normal)
    copyButton.addTarget(self, action: #selector(copySelectedText), for: .touchUpInside)
}


private func display(_ textField: UITextField, _ copyButton: UIButton) {

    copyButton.translatesAutoresizingMaskIntoConstraints = false
    textField.translatesAutoresizingMaskIntoConstraints = false

    view.addSubview(copyButton)
    view.addSubview(textField)

    textField.backgroundColor = .white
    textField.widthAnchor.constraint(greaterThanOrEqualToConstant: 200).isActive = true
    textField.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    textField.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

    copyButton.topAnchor.constraint(equalTo: textField.bottomAnchor, constant: 20).isActive = true
    copyButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
}

}

...