首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速条码扫描

快速条码扫描
EN

Stack Overflow用户
提问于 2014-12-03 19:21:18
回答 1查看 2.6K关注 0票数 2

我试图添加条形码扫描到我的应用程序使用RSBarcodes。我有两个问题:无法更新显示扫描条形码的标签,以及委托将条形码发送到我的调用视图控制器无法工作。下面是处理扫描的视图控制器的代码:

代码语言:javascript
复制
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中的代码:

代码语言:javascript
复制
protocol selectCarrierDelegate {
   func selectCarrier(carrierID: String,carrier: String)
}

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

以及控制器中应接收条形码的相关代码:

代码语言:javascript
复制
class InBoundViewController: UIViewController,selectCarrierDelegate,UIAlertViewDelegate,UITableViewDelegate,UITableViewDataSource,barcodesScannedDelegate {

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

有谁知道为什么标签不会改变,而委托却不起作用?

EN

回答 1

Stack Overflow用户

发布于 2015-02-10 13:36:13

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

试试这个:

代码语言:javascript
复制
dispatch_async(dispatch_get_main_queue(), { () -> Void in
    self.label1Label.text = code
})

Swift 4:

代码语言:javascript
复制
DispatchQueue.main.async {
    self.label1Label.text = code
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27279921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档