【问题标题】:Swift - View not displaying/updating controls even though they are visibleSwift - 查看不显示/更新控件,即使它们是可见的
【发布时间】:2015-07-10 05:03:31
【问题描述】:

为这个可怕的标题道歉,但我真的想不出更好的方式来表达它。我的代码如下:

@IBAction func btnSaveTapped(sender: UIButton) {
    println("Save Button Pressed")
    self.StartAI()
    self.btnSave.enabled = false
    self.AnimateButton(sender)

    var booContinueWithSend:Bool = true
    (Continues)

当我运行上面的代码时,屏幕上的控件没有变化。我已经逐步完成了代码和每一行,没有任何变化。即使是btnSave.enabled,也没有变化。我已通过poing 控制台调试器确认该按钮未启用,但它仍显示为已启用。是的,我已将其设置为根据状态明显改变(下面的代码):

self.btnSave.setTitleColor(conButtonTextColour, forState: UIControlState.Normal)
self.btnSave.setTitleColor(conButtonTextColourDisabled, forState: UIControlState.Disabled)

其中conButtonTextColourUIColor.blackColorconButtonTextColourDisabled 是灰色的。

我的活动指示器也会发生这种情况,我已成功手动测试。当我运行上面的代码 (btnSaveTapped) 时,什么也没有发生(它不会像它应该显示的那样显示)。我在这里以编程方式创建 AI:

func CreateAI() {
    let conAIViewHeightWidth:CGFloat = 100
    let conHeightWidth:CGFloat = 50

    self.aiView.setTranslatesAutoresizingMaskIntoConstraints(false)
    self.view.addSubview(self.aiView)
    self.aiView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.3)
    self.aiView.layer.cornerRadius = 10

    var constraintViewHeight:NSLayoutConstraint = NSLayoutConstraint(item: self.aiView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: conAIViewHeightWidth)
    var constraintViewWidth:NSLayoutConstraint = NSLayoutConstraint(item: self.aiView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: conAIViewHeightWidth)
    self.aiView.addConstraints([constraintViewHeight, constraintViewWidth])

    var constraintViewX:NSLayoutConstraint = NSLayoutConstraint(item: self.aiView, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
    var constraintViewY:NSLayoutConstraint = NSLayoutConstraint(item: self.aiView, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)
    self.view.addConstraints([constraintViewX, constraintViewY])


    self.aiActivityIndicator.setTranslatesAutoresizingMaskIntoConstraints(false)
    self.aiView.addSubview(self.aiActivityIndicator)
    self.aiActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge


    var constraintX:NSLayoutConstraint = NSLayoutConstraint(item: self.aiActivityIndicator, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.aiView, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
    var constraintY:NSLayoutConstraint = NSLayoutConstraint(item: self.aiActivityIndicator, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.aiView, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)
    self.view.addConstraints([constraintX, constraintY])

    self.aiActivityIndicator.hidesWhenStopped = true
    self.aiActivityIndicator.startAnimating()

    StopAI()
}

这是我分别启动和停止 AI 的两个例程。因为 AI 是 aiView 的子视图,所以我只是隐藏或取消隐藏它。然而,面对这些问题,我决定变得超级安全,并确保我没有隐藏并启用 AI。

func StartAI() {
    self.aiView.hidden = false
    self.aiActivityIndicator.hidden = false
    self.aiActivityIndicator.startAnimating()
    println("Started AI")
}

func StopAI() {
    self.aiView.hidden = true
    println("Stopped AI")
}

我做错了什么? 提前致谢。

【问题讨论】:

  • 这可能是因为限制。有可能您对某些元素添加了约束,而有些元素没有约束,这使得视图非交互

标签: ios swift uibutton uiactivityindicatorview


【解决方案1】:

试试这个代码:

view.layoutIfNeeded()

在所有更改完成后实施

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2013-01-18
    • 2015-10-29
    • 2021-08-10
    • 1970-01-01
    相关资源
    最近更新 更多