【问题标题】:Set UIButton state to selected when creating custom UIButton class创建自定义 UIButton 类时将 UIButton 状态设置为选中
【发布时间】:2015-04-29 17:26:38
【问题描述】:

我的 UIButton 已创建,它具有我想要的状态的颜色。

但是,当我单击它时,它并没有保持选中状态。

我正在阅读的所有代码都解决了 IB 操作后视图控制器中按钮的状态。 touchesBegan这个方法我还不太懂。

我必须重复这 14 次,并希望避免为每一个设置这个..

编辑:代码:

class AppointmentDatePickerAMButton: UIButton {
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.setTitleColor(UIColor.grayColor(), forState: UIControlState.Normal)
        self.setTitleColor(UIColor.redColor(), forState: UIControlState.Highlighted)
        self.setTitleColor(UIColor.blueColor(), forState: UIControlState.Selected)


    }
}

【问题讨论】:

  • 您是在设置控件状态的颜色突出显示还是选中?记住 UIButton 有 4 种状态。
  • 你能分享你的代码吗?
  • 你在灰色和红色之间切换?它会变成蓝色吗?什么时候?
  • @Mikael - 我从来没有让它变成蓝色。我不想诉诸 IBActions。

标签: ios swift uibutton


【解决方案1】:

您要做的就是为按钮添加目标操作,将按钮实例传递给该方法并在其上设置sender.selected = YES(如果只选择)或sender.selected = !sender.selected(如果需要开/关行为)。在您的代码中,您定义了选定状态的外观,然后您只需设置控制该状态。请记住,按钮可以同时组合多个状态(例如突出显示和选中)。

【讨论】:

  • 这是正确的答案,因为UIButton 不会仅通过按下它就保持选中状态。它将在状态之间切换,因此如果您想在用户点击它后保持选中状态,则必须在代码中设置它。
  • 完全同意您的评论。这就是我想在回答中表达的:)
  • 不回答问题。我知道我能做到。
  • 那么问题出在哪里?根据你的问题你不知道。
  • @JulianKról - 请参阅下面的答案
【解决方案2】:

将此添加到 UIButton:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    super.touchesBegan(touches, withEvent: event)
    self.highlighted = true

}

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
    super.touchesEnded(touches, withEvent: event)
    self.selected = !self.selected
    self.highlighted = false
}

【讨论】:

  • 这并没有说明用户可以在您的按钮上进行的各种触摸交互,只是触摸结束。如果您不关心用户是否触摸并拖离或执行了一些其他不代表真正选择的触摸操作,那么这对您有用。否则,这不是一个有效的答案。
  • 当前的实现可能对标准按钮行为有害look here 然后here 为寻求帮助而投反对票并不好!
  • 尽管它可能有效(尚未测试该解决方案),但这不是一种常见的方法,因此团队中的同事或将维护代码的人可能会感到非常惊讶:P
  • 还有一个问题,为什么在结束时设置选择而不是在开始时?因为颜色不会正确动画?这不应该是原因
  • @JulianKról - 添加了对 super 的调用,这应该会为你解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 2012-08-03
  • 2017-03-05
相关资源
最近更新 更多