我遇到一个问题,从一个类到另一个类获得一个简单的变量,这是非常令人沮丧的:/ ...
这是我有两个视图控制器类的交易:ViewController.swift
和ViewController2.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中显示的包的实际坐标。
答案 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)
}
}