2016-12-14 66 views
0

我有类firstViewController在这个函数产生的itemid访问常数从另一个视图控制器

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) { 

    // Check if the metadataObjects array is not nil and it contains at least one object. 
    if metadataObjects == nil || metadataObjects.count == 0 { 
     qrCodeFrameView?.frame = CGRect.zero 
     messageLabel.text = "No QR/barcode is detected" 
     return 
    } 
    //Get metadata object 
let metadataObj = metadataObjects[0] as! AVMetadataMachineReadableCodeObject 
    if supportedCodeTypes.contains(metadataObj.type) { 
    //if the found metadata is equal to the QR code metadata then update the status label's text and set the the bounds 
     let barCodeObject = videoPreviewLayer?.transformedMetadataObject(for: metadataObj) 
     qrCodeFrameView?.frame = barCodeObject!.bounds 

     if metadataObj.stringValue != nil { 
     messageLabel.text = metadataObj.stringValue 
      let itemID = metadataObj.stringValue 
      print(itemID) 


     } 
    } 
} 

我想打电话给ITEMID在其他的viewController称为secondViewController。如何从secondViewController中的firstViewController调用itemID?

回答

0

你只需要通过“prepareForSegue”。 只需确保在secondviewcontroller上将itemId声明为变量。

override func prepare(for segue: UIStoryboardSegue, sender: Any?){ 
     if (segue.identifier == "secondViewControllerSeque") { 
      let secondViewController = segue.destination as! SecondViewController 
      secondViewController.itemID = self.itemID 
     } 

    } 
0

如果你从FirstViewController继承到SecondViewController,你可以像这样传递数据。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "SecondViewControllerSegue" { 
     let secondViewController = segue.destination as? SecondViewController 
     if let itemID = itemID { 
      secondViewController.itemID = itemID 
     } 
    } 
} 

但是不要忘记在FirstViewController创建ITEMID变量,而是写了这样的代码

var itemID: String? 


if metadataObj.stringValue != nil { 
    messageLabel.text = metadataObj.stringValue 
     itemID = metadataObj.stringValue 
    } 
0

的firstViewController类需要一个成员变量,ITEMID。然后第二个视图控制器应该能够引用它。

现在itemID是您的captureOutpur函数中的局部变量。 功能完成运行后,此功能将消失。改为将其分配给成员。

0

如果您使用的是SEGUE,你只需要做到这一点:

FirstViewController(注:使用姓名首字母):

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "ShowNextView" {  // the identifier is what you named it 
     if let vc = segue.destination as? SecondViewController { 
      vc.itemID = itemID      // itemID is accessible here, probably global 
     } 
    } 
} 

SecondViewController:

var itemID:String 

func viewWillAppear() { 
    // code to use itemID value 
} 
1

只需要遵循3个步骤,我们假设您想要传递来自ViewControllerA to ViewControllerB:的数据

1.创建ViewControllerA and ViewControllerB

2.name的SEGUE之间的赛格瑞具有在它

3.override的prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) at ViewControllerA

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "MySegueID" { 
     if let destination = segue.destinationViewController as? ViewControllerB { 
      destination.myInformation = self.myInformation 
     } 
    } 
} 
0

属性检查员起初一个标识符声明一个变量在FirstViewController。

var itemID: String? 

在导航到SecondViewController之前,调用您的函数将值赋给该变量。

if metadataObj.stringValue != nil { 
    self.itemID = metadataObj.stringValue 
    } 

现在,声明itemIdForSVC公共变量SecondViewController也

public var itemIdForSVC: String? 

如果您使用的故事板再通过参数这样导航时,

override func prepare(for segue: UIStoryboardSegue, sender: Any?){ 
     if (segue.identifier == "secondViewControllerSeque") { 
      let secondViewController = segue.destination as! SecondViewController 
      secondViewController.itemIdForSVC = self.itemID 
     } 

    } 

或者,如果你正在做的一切以编程方式在导航时通过像这样,

let secondViewConttoller = SecondViewController() 
secondViewController.itemIdForSVC = self.itemID 
self.navigationController?.pushViewController(secondViewConttoller, animated: true) 
+0

谢谢,我正在做所有的编程。在FirstViewController中究竟应该声明代码,我似乎有这个问题让secondViewConttoller = SecondViewController() secondViewController.itemIdForSVC = self.itemID self.navigationController?.pushViewController(secondViewConttoller,animated:true) –

+0

您应该添加这段代码从你想要去的下一个第二页开始,即onButtonTapped事件。 –

相关问题