Ja, Sie müssen einen UIMenuController mit einer langen Druckgeste implementieren, die auf Ihr UILabel angewendet wurde. Es gibt einen ausgezeichneten Artikel dazu auf NSHipster, aber der Kern des Artikels ist der folgende.
eine Unterklasse von UILabel erstellen und die folgenden Methoden implementieren:
override func canBecomeFirstResponder() -> Bool {
return true
}
override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
return (action == "copy:")
}
// MARK: - UIResponderStandardEditActions
override func copy(sender: AnyObject?) {
UIPasteboard.generalPasteboard().string = text
}
Dann in Ihrem View-Controller, können Sie einen langen Druck Geste zu Ihrem Label hinzufügen:
let gestureRecognizer = UILongPressGestureRecognizer(target: self, action: "handleLongPressGesture:")
label.addGestureRecognizer(gestureRecognizer)
und behandeln die lange Drücken Sie mit dieser Methode:
func handleLongPressGesture(recognizer: UIGestureRecognizer) {
if let recognizerView = recognizer.view,
recognizerSuperView = recognizerView.superview
{
let menuController = UIMenuController.sharedMenuController()
menuController.setTargetRect(recognizerView.frame, inView: recognizerSuperView)
menuController.setMenuVisible(true, animated:true)
recognizerView.becomeFirstResponder()
}}
HINWEIS: Dieser Code wird direkt aus t übernommen Der NSHipster-Artikel, ich füge ihn hier nur für die SO-Konformität ein.
Sie müssen auch Benutzerinteraktionen auf dem Etikett aktivieren. Ohne diese wird die Geste niemals erkannt werden. Außerdem ist es wichtig, den Status der Geste in der Methode 'handleLongPressGesture' zu überprüfen. Dieser NSHipster Artikel macht einen schrecklichen Job, indem er das nicht richtig macht. – rmaddy
das auch gefunden :) http://stephenradford.me/make-uilabel-copyable/ – user2636197