【问题标题】:Weird UIButton behaviour in Today WidgetToday 小部件中奇怪的 UIButton 行为
【发布时间】:2016-01-03 09:24:58
【问题描述】:

我为我的应用添加了今天的扩展程序。我稍微编辑了原版小部件,使它看起来像这样:

请注意标题为“Went 1st”的 UIButton。当它被按下时(确切地说是在里面触摸),它会触发这个动作:

@IBAction func coinChanged(sender: UIButton) {
    if sender.titleLabel?.text == "Went 1st" {
        coin = true
        sender.titleLabel!.text = "Went 2nd"
    } else {
        coin = false
        sender.titleLabel!.text = "Went 1st"
    }
}

它基本上在两种状态之间改变,相应地改变它的标题和一个变量。

这就是问题所在 - 当我按下它时,它确实改变了它的标题,但立即将它改回来,最终得到与最初相同的标题。我的第一个想法是按下后该动作被调用了两次,但是当我检查 print 时,我发现它只被调用了一次。有时 prints 甚至没有出现在控制台中,但那是另一回事。

所以,这是一个问题。不过,还有一个——当我按下按钮时,整个小部件都放错了位置。要了解我的意思,请查看第一张图片(即按下任何按钮之前的小部件),然后再查看这张图片(按下按钮后):

您可以看到边框现在位于 TodayView 的最边缘。作为参考,这里是第一个分段控件的约束:

编辑:以下是“Went 1st/2nd”按钮的限制条件: 编辑 2:如果您投了反对票,请务必告诉我有什么问题,这样我下次就可以避免犯同样的错误

【问题讨论】:

  • 第二个bug很奇怪,你是不是设置了其他按钮属性。
  • 不,没什么。我什至删除了按钮并从头开始制作,但这也无济于事。另请注意,没有其他按钮可以做到这一点,只有“Went 1st”。

标签: ios swift today-extension


【解决方案1】:

问题是你不应该这样设置按钮文本。标题标签主要用于设置文本大小、字体、颜色等。要设置标题,请使用以下内容:

sender.setTitle("Button Title", forState: UIControlState.Normal)

所以新的 ib 动作应该是这样的:

@IBAction func coinChanged(sender: UIButton) {
    if sender.titleLabel?.text == "Went 1st" {
        coin = true
        sender.setTitle("Went 2nd", forState: UIControlState.Normal)
    } else {
        coin = false
        sender.setTitle("Went 1st", forState: UIControlState.Normal)
    }
}

【讨论】:

  • 谢谢,现在可以修改文本了。不过,我想知道为什么会这样 - 我将尝试查看文档。那么尺寸变化的问题呢?第二张图。
  • 您介意发布结果按钮的约束吗?谢谢
  • 添加到原帖中。
  • 我认为这是因为 UIButton 被重置,如果主要操作是 triggeret。至少标题。 ?‍♂️
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
相关资源
最近更新 更多