2016-09-02 5 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에서 올 때 언 와인드 SEGUE을 잡을해야하고 Label.text = ""

0

이 설정 QR (누름 취소) :

label.text = "" 
관련 문제