2016-09-02 7 views
1

QRコードリーダーアプリケーションを開発中です。ハイアーは私のコードです:Label.textから情報を消去する方法は?

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! 
    } 


    } 

問題は、私はキャンセルボタンをクリックして、私はLabel.textに表示され、私は最後にスキャンコードを参照して、QRコードスキャナを、再度開いたときに、戻る前のViewControllerに行くときです。これらのコードは一度だけ使用する必要があり、ユーザーがコードを参照すると再び使用できるようになるため、ラベルを消去する方法を教えてください。古いコードを表示しないでください。

+0

ラベルを隠すだけですか?あるいは、 'label.text =" "'に行きますか? – owlswipe

答えて

0

あなたが他のコールバック追加せずにしたい場合:

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

をあなたはSecondSecondViewControllerから戻ってくるとLabel.text = ""

0

ちょうどからどこの出口にこれを追加するが設定したときにそうでなければ、アンワインドセグエをキャッチする必要がありますQR(プレスキャンセル):

label.text = "" 
関連する問題