2017-08-13 10 views
1

ラベルからコピーボタン。ラベル(IOS)からコピーボタン

私は電卓用のコードを持っていますが、ボタンをクリックするとラベル付きの番号がコピーされるように計算方法を理解できません。 または私は長い間押したときに、それをコピーするように見えるように、どのように私はそれを行うことができます。

Photo1

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var displayResultLabel: UILabel! 
    var stillTyping = false 
    var dotIsPlaced = false 
    var firstOperand: Double = 0 
    var secondOperand: Double = 0 
    var operationSign: String = "" 

    var currentInput: Double { 
     get { 
      return Double (displayResultLabel.text!)! 
     } 
     set { 
      let value = "\(newValue)" 
      let ValueArray = (value.components(separatedBy:".")) 
      if ValueArray[1] == "0" { 
       displayResultLabel.text = "\(ValueArray[0])" 
      } else { 
       displayResultLabel.text = "\(newValue)" 
      } 
      stillTyping = false 
     } 
    } 

    @IBAction func numberPressed(_ sender: UIButton) { 
     let number = sender.currentTitle! 

     if stillTyping { 
      if (displayResultLabel.text?.characters.count)! < 20 { 
       displayResultLabel.text = displayResultLabel.text! + number 
      } 
     } else { 
      displayResultLabel.text = number 
      stillTyping = true 
     } 
    } 

    @IBAction func twoOperandsSignPressed(sender: UIButton) { 
     operationSign = sender.currentTitle! 
     firstOperand = currentInput 
     stillTyping = false 
     dotIsPlaced = false 
    } 

    func operateWithTwoOperands(operation: (Double, Double) -> Double) { 
     currentInput = operation(firstOperand, secondOperand) 
     stillTyping = false 
    } 

    @IBAction func equalitySignPressed(sender: UIButton) { 
     if stillTyping { 
      secondOperand = currentInput 
     } 

     dotIsPlaced = false 

     switch operationSign { 
     case "+": 
      operateWithTwoOperands{$0 + $1} 
     case "-": 
      operateWithTwoOperands{$0 - $1} 
     case "×": 
      operateWithTwoOperands{$0 * $1} 
     case "÷": 
      operateWithTwoOperands{$0/$1} 
     default: break 
     } 
    } 

    @IBAction func dotButtonPressed(_ sender: UIButton) { 
     if stillTyping && !dotIsPlaced { 
      displayResultLabel.text = displayResultLabel.text! + "." 
      dotIsPlaced = true 
     } else if !stillTyping && !dotIsPlaced { 
      displayResultLabel.text = "0." 
     } 
    } 
} 
+0

コードをデバッグするとき、どの行が予期しないことをしますか? – Smartcat

+0

@Smartcat ????? – KVL

答えて

1

私は両方の質問にお答えします。

最初の質問:UILabelに表示されているテキストをコピーするボタンを押す方法を教えてください。

回答:

@IBAction func yourButtonAction(_ sender: UIButton) { 
    UIPasteboard.general.string = yourLabel.text 
} 

2番目の質問: "コピー" アクションを示してどのように長押しすることができUILabelの?

回答:

我々はUILabelのサブクラスであるカスタムクラスを作成する必要がUILabelコピー可能を作ること。一時的にCopyableLabel呼ば:

import UIKit 

class CopyableLabel: UILabel { 

    override var canBecomeFirstResponder: Bool { return true } 

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

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

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

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

// MARK: Actions methods 
extension CopyableLabel { 

    func longPressGestureActionHandler(_ sender: UILongPressGestureRecognizer) { 
     becomeFirstResponder() 

     let menu = UIMenuController.shared 

     if !menu.isMenuVisible { 
      menu.setTargetRect(bounds, in: self) 
      menu.setMenuVisible(true, animated: true) 
     } 
    } 
} 

// MARK: Helper methods 
extension CopyableLabel { 

    func sharedInit() { 
     isUserInteractionEnabled = true 
     addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(longPressGestureActionHandler(_:)))) 
    } 
} 

、代わりに純粋UILabelCopyableLabelを使用します。

let yourLabel: CopyableLabel = CopyableLabel() 

あなたがInterface Builderのを使用する場合は、必ずあなたのラベルの基本クラスを定義しまし行います

enter image description here

0

あなたはコピーを実装し、UIPasteboardに貼り付けることができ、それは財産だ上であなたが値を読み書きすることができますstring。例えば:あなたのラベルに台紙から

displayResultLabel.text = UIPasteboard.general.string 

ペースト現在の値、および

UIPasteboard.general.string = displayResultLabel.text 

は、ラベルからペーストボードに値をコピーします。

関連する問題