【问题标题】:How to prepare for segue and send data from 1 label to another?如何准备 segue 并将数据从一个标签发送到另一个标签?
【发布时间】:2016-09-02 20:27:04
【问题描述】:

我正在开发一个二维码阅读器应用程序。代码如下:

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 时,我试图在我的下一个UIViewController 中将数据从Label.text(扫描结果)发送到label1。不幸的是,Label.text 是红色的(不能将String 类型的值分配给UILabel 类型)。

您知道我该如何处理吗? (我只想将扫描的信息发送给其他UIViewController

【问题讨论】:

  • 可能看起来是一件小事,但你真的不应该把你的变量大写。它使您的代码更难阅读。

标签: swift uilabel segue


【解决方案1】:

改变:

PC.label1.text = Label.text!

您正在尝试将字符串分配给UILabel 类型的变量,而不是其文本值。

【讨论】:

  • 作品也很完美。谢谢
【解决方案2】:

试试这个:

在您的目标 VC - SecondViewController 添加此变量:

var labelText : String = ""

在同一类中将这一行添加到 viewDidLoad() 方法中:

label1.text = labelText

然后您需要访问该字符串变量并将值放入其中。

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

【讨论】:

  • 我忘记了。非常感谢您的提醒!!它工作完美
【解决方案3】:

PC.label1无法加载数据集PC.label1.text

试试这个方法

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

【讨论】:

    【解决方案4】:

    添加 PC.label1.text = Label.text!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多