2016-09-02 23 views
2

我正在開發QR碼閱讀器應用程序。下面是代碼:如何準備segue並將數據從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! 
    } 


    } 

當我寫的函數prepareForSegue,我想從Label.text(從掃描結果)的數據發送到label1在我的下UIViewController。不幸的是,Label.text顯示爲紅色(不能將String類型的值分配給UILabel類型)。

你有什麼想法我該如何管理? (我只想掃描的信息發送給其他UIViewController

+0

可能看起來像一個小的事情,但你真的不應該利用你的變量。它使你的代碼難以閱讀。 – picciano

回答

3

更改此:

PC.label1.text = Label.text! 

您正嘗試將字符串分配給UILabel類型,而不是它的文本值的變量。

+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無法加載數據集PC.label1.text

嘗試這種方式

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