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