2016-09-02 1 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 쓰기

, 나는 내 옆에 UIViewControllerlabel1Label.text (스캔의 결과)의 데이터를 보내려고 오전 : 여기에 코드입니다. 불행하게도 Label.text은 빨간색으로 표시됩니다 ( String 유형의 값을 UILabel에 할당 할 수 없음).

어떻게 관리 할 수 ​​있습니까? 이에

+0

이 사소한 일처럼 보일 수 있음이 방법을 시도 설정,하지만 당신은 정말 당신의 변수를 활용해서는 안된다. 코드를 읽기가 어렵게 만듭니다. – picciano

답변

3

변경 (나는 다른 UIViewController에 스캔 한 정보를 보낼 만합니다) : 사용자가 입력 UILabel 대신 그 텍스트 값의 변수에 문자열을 할당하려고

PC.label1.text = Label.text! 

.

+0

완벽하게 작동합니다. 감사합니다. – Dakata

1

이 시도 :

당신의 목적지 VC에서 - SecondViewController이 변수 추가 : 다음

label1.text = labelText 

을 : 같은 클래스에

var labelText : String = "" 

을() 메소드의 viewDidLoad에이 줄을 추가 해당 문자열 변수에 액세스하여 값을 입력해야합니다.

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! 
     } 
관련 문제