2016-12-14 65 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事件。 –

相關問題