2017-08-07 90 views
1

我想創建本地複製和粘貼體驗,iOS的,當你點擊並按住一個UITextField提供 - 但我希望它在UILabel而不是UITextField工作。我想原生的iOS複製和粘貼UI上的UILabel

這是可能的,還是它只適用於UITextField? 我是否需要創建自己的自定義用戶界面並在UIPasteboard中解決問題,還是有更好的解決方案?

下面是一個典型的例子,雖然它通常也顯示放大後的循環:

A typical example of how it looks on a text field:

+0

[本文](HTTP:// stephenradford .me/make-uilabel-copyable /)會幫助你 –

+0

謝謝,這可能對我的問題的複製部分有效。 – Brewski

回答

2

這是很難做到的標籤上的標準複印菜單。或者也許在那個時候我嘗試過但沒有成功。所以我只實現了一個完整的拷貝解決方案我做了類似下面 -

import UIKit 

class KGCopyableLabel: UILabel { 

    override public var canBecomeFirstResponder: Bool { 
     get { 
      return true 
     } 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     setup() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     setup() 
    } 

    func setup() { 
     isUserInteractionEnabled = true 
     addGestureRecognizer(UILongPressGestureRecognizer(
      target: self, 
      action: #selector(showCopyMenu(sender:)) 
     )) 
    } 

    override func copy(_ sender: Any?) { 
     UIPasteboard.general.string = text 
     UIMenuController.shared.setMenuVisible(false, animated: true) 
    } 

    func showCopyMenu(sender: Any?) { 
     becomeFirstResponder() 
     let menu = UIMenuController.shared 
     if !menu.isMenuVisible { 
      menu.setTargetRect(bounds, in: self) 
      menu.setMenuVisible(true, animated: true) 
     } 
    } 

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 
     return (action == #selector(copy(_:))) 
    } 
} 

然後,您可以簡單的拖放標籤的故事板,並使其類型的KGCopyableLabel,它應該工作

+0

謝謝,這將適用於複製。我想讓粘貼工作,我需要將我的'UILabel'轉換爲'UITextfield'。 – Brewski