如何访问另一个类中的变量并更改其值

时间:2015-06-29 03:04:48

标签: ios swift xcode6

我是Xcode和Swift的新手,所以我不太了解它是如何工作的,但我试图制作一个弹出视图。我想点击按钮时弹出一个小视图。视图是一个View容器(我不知道这是否是最好的方法,所以如果没有,请告诉我一个更好的方法来做到这一点)它开始隐藏然后当我点击一个按钮它变得可见。此View容器还有一个按钮,如果单击该按钮,它将再次隐藏视图。

以下是代码:

r

当我运行应用程序时,它启动正常,因为启动按钮就在那里,当我点击它时弹出窗口显示但是当我单击后退按钮时它给出了一个错误,在控制台中显示

Interface Builder文件中的未知类MKMapView。 致命错误:在解包可选值时意外发现nil

和第31行d

它说线程1:import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBOutlet weak var popUpView: UIView! @IBAction func startButton(sender: UIButton) { popUpView.hidden = false } } import UIKit class PopUpViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func prepareForSegue(segue:UIStoryboardSegue, sender:AnyObject?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. } @IBAction func backButton(sender: UIButton) { ViewController().popUpView.hidden = true } }

有人可以提供帮助。感谢

1 个答案:

答案 0 :(得分:1)

从didPrepareForSeque方法访问popUpView变量(当您转到另一个视图时,会自动调用此方法)。问题是,如果您尝试将值设置为很快(意味着,该按钮未在视图上绘制),您将收到nil错误。这是一个小解决方法。您使用临时变量(tmpValue)来存储按钮的状态(隐藏或不隐藏),因此当viewDidLoad时,您将读取此值并按预期​​将按钮设置为隐藏状态。

在ViewController类中声明临时变量(必须是可选的):

var tmpValu:Bool?

然后在你的PopUpViewController类中从backButton action中删除这一行:

ViewController().popUpView.hidden = true

相反,您将使用prepareForSegue方法,如下所示:

 override func prepareForSegue(segue: UIStoryboardSegue, sender:  AnyObject?) {
   let destinationViewController = segue.destinationViewController as! ViewController
   destinationViewController.tmpValu = true
 }

现在,回到viewDidLoad中的ViewController类中添加以下代码:

override func viewDidLoad() {
    super.viewDidLoad()
    if let value = tmpValu {
        popUpView.hidden = value
    }
}