如何从另一个类中访问变量? SWIFT代码

时间:2016-08-02 14:21:32

标签: xcode variables uiviewcontroller global transfer

我遇到一个问题,从一个类到另一个类获得一个简单的变量,这是非常令人沮丧的:/ ...

这是我有两个视图控制器类的交易:ViewController.swiftViewController2.swift

ViewController.swift链接到一个故事板,里面有一个我放置的库存包,它只是一个图像。然后有一个@IBAction,当你点击它打开的包时,第二个故事板会弹出视图。这由ViewController2.swift控制。我所要做的就是将袋子图像的中心从ViewController传递到ViewController2,但我似乎无法让它工作任何帮助都会非常感激。

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
            }

当我从这个ViewController打印bagCenter时,它正常工作并给我一个正确的值。所以bagCenter变量我想以某种方式传递给ViewController2.swift

这是我从ViewController2.swift尝试的内容,但它似乎永远不会起作用,总是给我0而不是实际值。

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()
}

但是当我这样做时,它总是会产生0并且我不会得到在ViewController1中显示的包的实际坐标。

2 个答案:

答案 0 :(得分:1)

在ViewController2中创建以下变量

var previousViewController: ViewController!

在ViewController类

中添加以下代码行
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){

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

现在viewDidLoad方法ViewController2可以访问bagCenter,如下所示:

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


    var bagCenter = previousViewController.transferViewControllerVariables()
}

答案 1 :(得分:1)

在视图控制器

中尝试此操作
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
        }
    }
}

并在视图中控制器2

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