2014-12-03 172 views
2

我正在嘗試使用RSBarcodes將條形碼掃描添加到我的應用程序。我有兩個問題:無法更新顯示掃描的條形碼的標籤,以及將條形碼發送給我的主叫視圖控制器無法工作的委託。下面是我爲處理該掃描的視圖控制器代碼:Swift條碼掃描

import UIKit 
import AVFoundation 
import RSBarcodes 

class ScanViewController: RSCodeReaderViewController { 
@IBOutlet weak var label1Label: UILabel! 
@IBOutlet weak var label2Label: UILabel! 
@IBOutlet weak var scanLabel: UIButton! 

var delegate: barcodesScannedDelegate? 
var codes:[String] = [] 
override func viewDidLoad() { 
    super.viewDidLoad() 

    var code="" 
    // Do any additional setup after loading the view. 
    focusMarkLayer.strokeColor = UIColor.redColor().CGColor 

    cornersLayer.strokeColor = UIColor.yellowColor().CGColor 

    tapHandler = { point in 
     //println(point) 
    } 

    barcodesHandler = { barcodes in 

     for barcode in barcodes { 
      if !contains(self.codes, barcode.stringValue) { 
       self.codes.append(barcode.stringValue) 
       code = barcode.stringValue 
      } 

     } 
     println(code) 
     self.label1Label.text = code 
    } 

} 

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

@IBAction func finishedPressed(sender: UIButton) { 
    delegate?.barcodesScanned(self.codes) 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

@IBAction func cancelPressed(sender: UIButton) { 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

}

只是爲了確保我正確地做了代表,這是我在Protocol.swift代碼:

protocol selectCarrierDelegate { 
    func selectCarrier(carrierID: String,carrier: String) 
} 

protocol barcodesScannedDelegate { 
    func barcodesScanned(barcodes: [String]) 
} 

並且在控制器中應該接收條形碼的相關代碼:

class InBoundViewController: UIViewController,selectCarrierDelegate,UIAlertViewDelegate,UITableViewDelegate,UITableViewDataSource,barcodesScannedDelegate { 

func barcodesScanned(barcodes: [String]) { 
    println("codes=\(barcodes)") 
} 

任何人都有任何想法爲什麼標籤不會改變,代表不工作?

+0

在InBoundViewController,您是否在ScanViewController對象的委託設置爲自我? – 2014-12-03 19:29:56

+0

當然不是。這會讓人覺得太過分了!我知道我必須錯過簡單的事情。我仍然不確定爲什麼標籤沒有更新,但至少代表工作正常。謝謝! – 2014-12-03 20:14:15

回答

4

您需要更新主線程中的所有UI。

試試這個:

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
    self.label1Label.text = code 
})