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