我如何在另一个课程中访问IBOutlet?迅速

Hyo*_*Han 1 iboutlet ios swift

对不起,我的英语能力很差。

我想在另一个类中访问IBOutlet。我在stackoverflow中发现了许多问题,但是所有答案在我的代码中均不起作用

首先,这是我的代码。

ViewController.swift

import UIKit

class ViewController: UIViewController {

@IBOutlet var MainViewController: UIView! = nil
@IBOutlet var LyricsViewController: UIView! = nil
@IBOutlet var ListViewController: UIView! = nil
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

   showMainViewController()    
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func showMainViewController(){
    MainViewController.alpha = 1
    LyricsViewController.alpha = 0
    ListViewController.alpha = 0
}
func showLyricsViewController(){
    MainViewController.alpha = 0
    LyricsViewController.alpha = 1
    ListViewController.alpha = 0
}
func showListViewController(){
    MainViewController.alpha = 0
    LyricsViewController.alpha = 0
    ListViewController.alpha = 1
}

}
Run Code Online (Sandbox Code Playgroud)

我想在此类中访问ViewController的函数

SecondViewController.swift

import UIKit

class SecondViewController : UIViewController{

@IBOutlet weak var menuButton: UIButton!
var listBoolean = false

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func LinkListView(sender: AnyObject) {

    if(listBoolean == false){
        ViewController().showListViewController()
        listBoolean = true
    }
    else{
        ViewController().showMainViewController()
        listBoolean = false

    }

}

}
Run Code Online (Sandbox Code Playgroud)

func showMainViewController()在ViewController的viewDidLoad()中工作,但在SecondViewController中使用此设置时出错

致命错误:展开可选值时意外发现nil

我该如何解决这个问题?

小智 5

您必须创建一个视图控制器对象,然后访问它。例如:-

var dash : abcViewController = storyBoard.instantiateViewControllerWithIdentifier("abc") as! abcViewController
var a = dash.getXYZ()
Run Code Online (Sandbox Code Playgroud)

像这样,您可以访问其他视图控制器的变量和函数。