gpt4 book ai didi

ios - swift : How to set IBOutlet from another controller?

转载 作者:行者123 更新时间:2023-11-28 13:13:55 24 4
gpt4 key购买 nike

我想隐藏我的 IBOutlet。但是,将文本设置为 empy 字符串工作得很好,但是当我直接访问我的 IBOutlet 时,我不断收到“在展开可选值时意外发现 nil”的错误。

我尝试将我的 IBOutlet 设置为本地变量,但它也给出了错误。我准备了一些删除了不相关行的代码片段,以便在不提供太多代码的情况下更好地暴露我的问题:

PageContentViewController

@IBOutlet weak var LabelTop: UILabel!
var Test:UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.LabelTop = self.Test
}

页面 View Controller

func viewControllerAtIndex(index: Int)-> PageContentViewController?{

if((self.pageTitles.count == 0) || (index >= self.pageTitles.count))
{
return nil
}

var pageContentViewController: PageContentViewController = self.storyboard!.instantiateViewControllerWithIdentifier("PageContentViewController") as! PageContentViewController
pageContentViewController.imageFile = self.pageImages[index]
pageContentViewController.titleText = self.pageTitles[index]
pageContentViewController.pageIndex = index
if(index == 2){

pageContentViewController.Test.hidden = true
}
else {
pageContentViewController.Test.hidden = false
}

return pageContentViewController

}

在 if 语句中尝试访问 UIlabel 时程序崩溃。显然,正如我之前所说,我可以轻松访问文本属性并将其设置为空字符串,但我想知道为什么 IBOutlet 无法通过这种方式访问​​。

提前致谢!

最佳答案

您遇到的问题是,您在 viewControllerAtIndex 方法中尝试设置 socket ,但 View Controller (PageContentViewController) 未加载到 View 层次结构中,因此 socket 仍然为零。

您可以使用的解决方案之一是向 PageContentViewController 添加一个属性,例如 isHidden,然后在 viewDidAppear 中检查该属性并隐藏或显示 View :

var isHidden:Bool = true 
override func viewDidAppear(animated: Bool) {
superviewDidAppear(animated)

self.Test.hidden = isHidden
}

viewControllerAtIndex 方法中,将设置 Test 控件的隐藏属性的行更改为 isHidden:

if(index == 2){

pageContentViewController.isHidden = true
}
else {
pageContentViewController.isHidden = false
}

关于ios - swift : How to set IBOutlet from another controller?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30049067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com