Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在另一个类中访问IBOutlet?迅速地_Ios_Swift_Iboutlet - Fatal编程技术网

Ios 如何在另一个类中访问IBOutlet?迅速地

Ios 如何在另一个类中访问IBOutlet?迅速地,ios,swift,iboutlet,Ios,Swift,Iboutlet,对不起,我的英语水平不好 我想在另一个类中访问IBOutlet。 我在stackoverflow中发现了许多问题,但所有答案都不适用于我的代码 首先,这是我的代码 ViewController.swift 我想在这个类中访问ViewController的函数 斯威夫特 func showMainViewController在ViewController的viewDidLoad中工作 但此设置在SecondViewController中出错 致命错误:在展开可选值时意外发现nil 如何解决此问题?

对不起,我的英语水平不好

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

首先,这是我的代码

ViewController.swift

我想在这个类中访问ViewController的函数

斯威夫特

func showMainViewController在ViewController的viewDidLoad中工作 但此设置在SecondViewController中出错

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


如何解决此问题?

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

例如:

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

当第二个ViewController加载时,在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
    }
}

注意:在故事板ID中分配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")
        }
    }

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


通过这种方式,您可以访问其他视图控制器的变量和函数。

这只是一个与问题无关的提示:不要调用变量…如果它是UIView对象,请调用viewController,并且总是以小写字母开始变量或方法名称,以避免与类名称混淆。非常抱歉,我无法理解您的答案,因为我的开发技能较低。我可以得到示例代码吗?我已经编辑了我的答案。你现在应该明白了。对不起,我还有错误。但我非常感谢您的回答在SecondViewController中创建另一个布尔变量,在if else语句中设置SecondViewController的布尔值。当您的第二个ViewController加载时,在viewDidLoad方法内部,检查布尔值,并在其中运行相应的方法。我只能帮助您做到这一点。你必须自己学习和思考。
class SecondViewController: UIViewController{
@IBOutlet weak var displayLabel: UILabel!
var message = ""

override func viewDidLoad(){
     super.viewDidLoad()
     self.displayLabel.text = message
    }
}
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")
        }
    }
var dash : abcViewController = storyBoard.instantiateViewControllerWithIdentifier("abc") as! abcViewController
var a = dash.getXYZ()