如何从一个 class 访问另一个变量? Swift代码
How to access variable from one class in another? Swift Code
我在将一个简单变量从一个 class 转换为另一个时遇到问题,这非常令人沮丧:/...
这是交易我有两个视图控制器 classes 命名为: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.
中显示的包的实际坐标
在 ViewController2
中创建以下变量
var previousViewController: ViewController!
在您的 ViewController Class
中添加以下代码行
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
if segue.destinationViewController .isKindOfClass(ViewController2){
let vc2 = segue.destinationViewController as! ViewController2
vc2.previousViewController = self
}
}
现在,在 ViewController2
的 viewDidLoad
方法中,您可以像下面这样访问 bagCenter:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
var bagCenter = previousViewController.transferViewControllerVariables()
}
在视图控制器中试试这个
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
}
}
}
并在视图 controller2 中
class ViewController2: UIViewController {
var bagCenter:CGPoint!
override func viewDidLoad() {
super.viewDidLoad()
print(bagCenter)
}
}
我在将一个简单变量从一个 class 转换为另一个时遇到问题,这非常令人沮丧:/...
这是交易我有两个视图控制器 classes 命名为: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.
中显示的包的实际坐标在 ViewController2
中创建以下变量var previousViewController: ViewController!
在您的 ViewController Class
中添加以下代码行override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
if segue.destinationViewController .isKindOfClass(ViewController2){
let vc2 = segue.destinationViewController as! ViewController2
vc2.previousViewController = self
}
}
现在,在 ViewController2
的 viewDidLoad
方法中,您可以像下面这样访问 bagCenter:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
var bagCenter = previousViewController.transferViewControllerVariables()
}
在视图控制器中试试这个
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
}
}
}
并在视图 controller2 中
class ViewController2: UIViewController {
var bagCenter:CGPoint!
override func viewDidLoad() {
super.viewDidLoad()
print(bagCenter)
}
}