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

对不起,我的技能很差。

我想在另一个课程中访问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
}

}

我想在这个类中访问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

    }

}

}

func showMainViewController()在ViewController的viewDidLoad()中工作,但在SecondViewController中有这个设置的错误

致命错误:在解包可选值时意外发现nil

我该如何解决这个问题?


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

var dash : abcViewController = storyBoard.instantiateViewControllerWithIdentifier("abc") as! abcViewController
var a = dash.getXYZ()

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


这是因为ViewController尚未加载。 您创建一个变量来临时存储它。 当ViewController出现时,在您的viewDidLoad方法下,将变量分配给IBOutlet。

例:

FirstViewController您希望将一个字符串消息传递给SecondViewController并显示在IBOutlet的标签上。 您无法将字符串直接分配给SecondViewController上的FirstViewController 。 你必须先创建一个字符串。

当您的SecondViewController加载时,在viewDidLoad方法中,将“传递消息”字符串分配给要显示的标签。 这就是你在IBOutlet上显示的方式。

以防万一:

class FirstViewController: UIViewController{
 // All your above codes.

func PassMessage(){
     let displayViewController = storyboard!.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController
     displayViewController.message = "pass message"
    }
}

在SecondViewController中

class SecondViewController: UIViewController{
@IBOutlet weak var displayLabel: UILabel!
var message = ""

override func viewDidLoad(){
     super.viewDidLoad()
     self.displayLabel.text = message
    }
}

注意:在StoryboardID中分配SecondViewController


我已经使用这个函数来处理以前的类函数操作

let appdel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let nav : UINavigationController! = window.rootViewController as! UINavigationController

for(var i:Int = 0 ; i < nav.viewControllers.count ; i++)
    {
        let viewc :  UIViewController = nav.viewControllers[i]
        if(viewc.respondsToSelector("showListViewController"))
        {
            viewc.performSelector("showListViewController")
        }
    }
链接地址: http://www.djcxy.com/p/87745.html

上一篇: how can i access IBOutlet in another class? in swift

下一篇: UITableViewCell subclass IBOutlets returns nil