Swift:如何从View控制器访问AppDelegate变量?

时间:2015-06-23 08:55:50

标签: swift viewcontroller appdelegate

我想在文本或csv(prefer)文件中写入视图控制器中的变量。

确实我正在做一个绘图应用程序,我想在文件中写下手指的当前位置。

class ViewController: UIViewController {var lastPoint = CGPoint.zeroPoint ... }

我想从AppDelegate访问lastPoint.x和lastPoint.y。我怎么能这样做?谢谢。

4 个答案:

答案 0 :(得分:29)

你的问题充满了混乱,但如果这就是你要找的东西:

您可以通过获取对它的引用来访问appDelegate:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

之后,如果您在appDelegate中存储了一个名为lastPoint的属性,则可以非常简单地访问其组件:

let x = appDelegate.lastPoint.x
let y = appDelegate.lastPoint.y

如果您需要从AppDelegate访问您的viewController属性,那么我建议您在appdelegate中引用您的视图控制器:

var myViewController: ViewController!

然后在创建视图控制器时,您可以在appdelegate属性中存储对它的引用:

如果您在appDelegate之外创建视图控制器:

Swift 1-2语法

var theViewController = ViewController()
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.myViewController = theViewController

Swift 3-4语法

var theViewController = ViewController()
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.myViewController = theViewController

如果您在appDelegate中创建视图控制器:

self.myViewController = ViewController()

之后,只需访问其属性,即可从appdelegate访问viewcontroller中的数据:

let x = self.myViewController.lastPoint.x
let y = self.myViewController.lastPoint.y

答案 1 :(得分:2)

Swift 3更新

    var theViewController = ViewController()
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.myViewController = theViewController

答案 2 :(得分:1)

您可以创建一个BaseViewController并编写此

class BaseViewController {
  lazy var appDelegate : AppDelegate {
     return UIApplication.shared.delegate as? AppDelegate
  }
}

并使用BaseViewController继承其他视图控制器并通过

访问它
class ViewController : BaseViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    print(self.appDelegate?.lastPoint.x)
    print(self.appDelegate?.lastPoint.x)
}}

答案 3 :(得分:1)

我确实设法通过在AppDelegate.swift中创建一个ViewController实例从App委托访问我的ViewController,如:

var mainViewController = ViewController()

func applicationWillEnterForeground(_ application: UIApplication) {
    mainViewController.myVariable = "Hello".
}

仍然,我不明白AppDelegate如何“知道”mainViewController应该指向那个特定的ViewController。由于我的应用程序只有一个视图和一个ViewController,这很好,但我有多个ViewControllers与不同的UIViews相关联?感谢是否有人在这里可以阐明。 最好的祝福, 安德烈