2016-08-02 31 views
1

Ich bin ein Problem mit einer einfachen Variablen von einer Klasse zur anderen zu gelangen und es ist darüber hinaus extrem frustrierend:/...Wie kann man auf Variablen von einer Klasse in einer anderen zugreifen? Swift Code

Hier ist der Deal Ich habe zwei View-Controller-Klassen genannt: ViewController.swift und ViewController2.swift

ViewController.swift ist mit einem Storyboard verknüpft, das eine Art von Inventarbeutel hat, die ich nur ein Bild platziert habe. Dann gibt es eine @IBAction für, wenn Sie auf die Tasche klicken, öffnet es sich und das zweite Storyboard erscheint in Sicht. Dies wird von ViewController2.swift gesteuert. Alles, was ich tun möchte, ist einfach die Mitte des Taschenbildes von ViewController an ViewController2 zu übergeben, aber ich kann es nicht scheinen, um zu arbeiten, jede Hilfe würde sehr geschätzt werden.

class ViewController: UIViewController { 
    @IBOutlet weak var InventoryBag: UIImageView! 
    var bagCenter:CGPoint = CGPoint(x: 0, y: 0) 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     @IBAction func InventoryButtonTapped(sender: UIButton) { 
      self.InventoryBag.image = UIImage(named: "backpackimageopen") 
      bagCenter = self.InventoryBag.center 

     func transferViewControllerVariables() -> (CGPoint){ 
      return bagCenter 
      } 

Wenn ich das bagCenter von diesem ViewController aus drucke, funktioniert es richtig und gibt mir einen korrekten Wert. Also die Variable bagCenter möchte ich irgendwie an ViewController2.swift übergeben.

Hier ist, was ich aus ViewController2.swift versuchte, aber es scheint nie zu funktionieren und gibt mir immer eine 0 und nicht den tatsächlichen Wert.

class ViewController2: UIViewController { 

@IBOutlet weak var HideButton: UIButton! 
@IBOutlet weak var InventoryCollection: UICollectionView! 



override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 

    //Load the center of the inventory bag to this view controller to align the hide button. 
    var bagCenter = ViewController().transferViewControllerVariables() 
} 

Aber wenn ich dies tun, ergibt sich immer in einem 0 und ich habe nicht die tatsächlichen Koordinaten des Beutels, die in ViewController1 zeigen sich.

+1

Sie eine neue Instanz von Viewcontroller in ViewController2 Schaffung –

+0

Wie würde ich über sie gehen anders? Vielen Dank im Voraus :) –

Antwort

1

erstellen folgende Variable in ViewController2

var previousViewController: ViewController! 

Fügen Sie die folgende Codezeile in Ihrer Viewcontroller Klasse

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){ 

    if segue.destinationViewController .isKindOfClass(ViewController2){ 
     let vc2 = segue.destinationViewController as! ViewController2 
     vc2.previousViewController = self 
    } 
} 

Jetzt in viewDidLoad Methode von ViewController2 können Sie bagCenter wie unten Zugang:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 


    var bagCenter = previousViewController.transferViewControllerVariables() 
} 
+0

Dies macht die App zum Absturz, wenn ich zu dieser Ansicht durch Öffnen des Inventars wechseln –

+0

können Sie hier den Code, wo Sie Navigieren zu ViewController2 –

+0

Ich bearbeitete die Antwort. Bitte überprüfen Sie –

1

Versuchen Sie dies in Sicht Contro ller

class ViewController: UIViewController { 

@IBOutlet weak var InventoryBag: UIImageView! 
    var bagCenter:CGPoint = CGPoint(x: 0, y: 0) 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    @IBAction func InventoryButtonTapped(sender: AnyObject) { 
     self.InventoryBag.image = UIImage(named:"MAKEUP_SHARE.jpg") 
     bagCenter = self.InventoryBag.center 
     performSegueWithIdentifier("Go", sender: self) 
    } 


    // Give a segue identifier in storyboard 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "yoursegueidentifier" { 
      let dvc = segue.destinationViewController as? ViewController2 
      dvc!.bagCenter = bagCenter 
     } 
    } 
} 

und im Hinblick controller2

class ViewController2: UIViewController { 
    var bagCenter:CGPoint! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     print(bagCenter) 
    } 
}