【问题标题】:xcode swift ios subView alpha not working when called from instance从实例调用时,xcode swift ios subView alpha 不起作用
【发布时间】:2018-09-20 00:32:05
【问题描述】:

我无法从另一个视图控制器的实例控制子视图的 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。

任何想法为什么会失败?

【问题讨论】:

  • 你写:"class FirstView() // TabVC" ...你的意思是FirstViewUITabViewController子类 ?或者你的意思是FirstView是视图控制器显示在第一个Tab位置吗?
  • 并且... “未能使子视图变黑” ...您是否要使子视图BLACK?还是你想让它透明?
  • FirstView 是 UiTabViewController 的子类。 SecondClass 显示在选项卡位置。
  • @DonMag 想要关闭 alpha
  • OK - 你需要显示更多代码。你在哪里打电话secondView.subView.alpha = 0.0?在标签更改上?负载?你在哪里定义了subView?以及何时/何时将其添加到 SecondView?

标签: ios swift instance alpha subview


【解决方案1】:

如果这是您的实际代码...

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 不再存在。。 p>

如果您想更改在其他地方创建的 SecondView 实例中的值/属性,您必须获得对 实例的引用。

因此,例如,您的课程可能类似于以下内容:

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
    }        
}

如果这不是问题,那么您确实需要发布您的实际代码,以便我们了解发生了什么。

【讨论】:

  • 我会这样做的......但我上次这样做时,每个人都抱怨代码太多(SMH!)
【解决方案2】:

您需要将其作为子视图添加到第一个视图中,而不是尝试更改父视图的 alpha 值,子视图值会自动更改。

【讨论】:

  • TabVC 是这样吗?
  • 在具有视图的 VC 中它工作正常。但在 tabVC 中我没有尝试过。(可能是 tabVC 有其他视图层。)。你应该试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
相关资源
最近更新 更多