作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想隐藏我的 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/
我是一名优秀的程序员,十分优秀!