2016-09-02 9 views
2

私はQRコードリーダーアプリケーションを開発しています。ここでは、コードです:私は機能prepareForSegueを書くときセグを準備し、1つのラベルから別のラベルにデータを送る方法は?

var captureSession: AVCaptureSession? 
var videoPreviewLayer: AVCaptureVideoPreviewLayer? 
var qrCodeframeView: UIView? 

@IBOutlet weak var CancelButton: UIButton! 
@IBOutlet weak var Label: UILabel! 
override func viewDidLoad() { 

    CancelButton.hidden = true 
    Label.hidden = true 


    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


@IBAction func ScanMe(sender: AnyObject) { 

    CancelButton.hidden = false 
    Label.hidden = false 


    let captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) 

    var error: NSError? 
    let input: AnyObject! 

    do { 
     input = try AVCaptureDeviceInput (device: captureDevice) 
    } catch let error1 as NSError{ 

     error = error1 
     input = nil 

    } 

    if (error != nil){ 
    print ("\(error?.localizedDescription)") 
     return 
    } 
    captureSession = AVCaptureSession() 

    captureSession?.addInput(input as! AVCaptureInput) 

    let captureMetadatOutput = AVCaptureMetadataOutput() 
    captureSession?.addOutput(captureMetadatOutput) 

    captureMetadatOutput.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue()) 
    captureMetadatOutput.metadataObjectTypes = [AVMetadataObjectTypeQRCode] 

    videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
    videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill 
    videoPreviewLayer?.frame = view.layer.bounds 
    view.layer.addSublayer(videoPreviewLayer!) 

    captureSession?.startRunning() 
    view.bringSubviewToFront(Label) 
    view.bringSubviewToFront(CancelButton) 

    qrCodeframeView = UIView() 
    qrCodeframeView?.layer.borderColor = UIColor.greenColor().CGColor 
    qrCodeframeView?.layer.borderWidth = 2 
    view.addSubview(qrCodeframeView!) 
    view.bringSubviewToFront(qrCodeframeView!) 


} 

func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) { 

    if metadataObjects == nil || metadataObjects.count == 0 { 

     qrCodeframeView?.frame = CGRectZero 
     Label.text = "No QR code detected" 
     return 
    } 
    let metadateObj = metadataObjects[0] as! AVMetadataMachineReadableCodeObject 

    if metadateObj.type == AVMetadataObjectTypeQRCode { 

     let BarcodeObject = videoPreviewLayer?.transformedMetadataObjectForMetadataObject(metadateObj as AVMetadataMachineReadableCodeObject) as! AVMetadataMachineReadableCodeObject 
     qrCodeframeView?.frame = BarcodeObject.bounds 

     if metadateObj.stringValue != nil { 

      Label.text = metadateObj.stringValue 

      captureSession?.stopRunning() 



} 
    } 
} 


@IBAction func Cancel(sender: AnyObject) { 
    CancelButton.hidden = true 
    Label.hidden = true 


    captureSession?.stopRunning() 
    qrCodeframeView?.removeFromSuperview() 
    videoPreviewLayer?.removeFromSuperlayer() 


} 

@IBAction func Open(sender: AnyObject) { 

} 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     var PC : SecondSecondViewController = segue.destinationViewController as! SecondSecondViewController 
    PC.label1 = Label.text! 
    } 


    } 

、私は私の次のUIViewControllerlabel1Label.text(スキャンの結果)からのデータを送信しようとしています。残念ながら、Label.textは赤色で表示されます(Stringの値をUILabelに割り当てることはできません)。

どのように管理できますか?この中で

+0

を試してみてくださいPC.label1.text

を設定することはマイナーなもののように見えるかもしれませんが、あなたが本当にあなたの変数を生かすべきではありません。コードを読みにくくします。 – picciano

答えて

3

変更(私は他のUIViewControllerにスキャンされた情報を送信するためにのみ必要):あなたがタイプUILabelの代わりに、そのテキスト値の変数に文字列を代入しようとしている

PC.label1.text = Label.text! 

+0

作品も完璧です。ありがとうございます – Dakata

1

この試してみてください:あなたの目的地のVCで

を - SecondViewControllerは、この変数を追加:同じクラスの

var labelText : String = "" 

をのviewDidLoad()メソッドに次の行を追加します。

label1.text = labelText 

その後、あなたはその文字列変数にアクセスして値をその変数に入れる必要があります。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     var PC : SecondSecondViewController = segue.destinationViewController as! SecondSecondViewController 
     PC.labelText = Label.text! 
} 
+0

私はそれを忘れました。思い出させていただきありがとうございます!それは完璧に動作します – Dakata

1

PC.label1データをロードすることができないこのよう

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
      var PC : SecondSecondViewController = segue.destinationViewController as! SecondSecondViewController 
     PC.label1.text = Label.text! 
     } 
関連する問題