我无法从另一个视图控制器的实例控制子视图的alpha值。
以下是该问题的一些伪代码:
class FirstView() // TabVC
{
func hideSecondViewSubView()
{
let secondView = SecondView()
secondView.number = 0 // this value changes correctly
secondView.subView.alpha = 0.0 // this fails to control the subview alpha
}
}
class SecondView() // a tab view
{
func viewDidLoad()
{
addSubview(subView)
}
lazy var subView()
{
let view = UIView()
var number = 1 // initial value for test var
view.alpha = 1.0 // initial alpha for subview
}
}
在IOS选项卡式视图项目上使用Sierra上的Xcode 9.2。
为什么会失败的任何想法?
答案 0 :(得分:0)
IF 这是您的实际代码...
1. class FirstView() // TabVC
2. {
3. func hideSecondViewSubView()
4. {
5. let secondView = SecondView()
6. secondView.number = 0 // this value changes correctly
7. secondView.subView.alpha = 0.0 // this fails to control the subview alpha
8. }
9. }
在第5行,您创建了SecondView
的新实例。然后,在本地实例secondView
中设置两个属性。
在第8行,函数退出,secondView
的本地实例超出范围,secondView
不再存在
如果您要更改在其他地方创建的SecondView
实例中的值/属性,则必须获得对 实例的引用。< / p>
因此,例如,您的类看起来与此类似:
class FirstView() // TabVC
{
var secondView = SecondView()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(secondView)
// set initial properties of secondView - constraints, etc.
}
func hideSecondViewSubView()
{
// don't create a new instance - use the class-scoped instance
//let secondView = SecondView()
secondView.number = 0
secondView.subView.alpha = 0.0
}
}
如果这不是 问题,那么你真的需要发布你的实际代码,以便我们可以看到发生了什么。
答案 1 :(得分:-1)
您需要将其作为子视图添加到第一个视图中,而不是尝试更改父视图的Alpha值,子视图值将自动更改。