【问题标题】:Whats the use of UIControlState "application" of UIButton?UIButton的UIControlState“应用程序”有什么用?
【发布时间】:2017-05-03 12:02:00
【问题描述】:

我也通过了apple doc,但它只是说它

可供应用程序使用的其他控制状态标志。

它只是一个 getter 方法,所以什么时候设置?

【问题讨论】:

  • 我认为您的问题正文+标题有点误导,因为UIControlState.application 根本不是UIButton 特有的,它也不是一种方法。您是在问UIControlState.application 的用途是什么,以及任何 UI 元素的 state 属性在什么时候假定为 .application 值?
  • @KKRocks 我认为 OP 已经看到了,因为引用的句子完全相同。

标签: ios swift uibutton uicontrolstate


【解决方案1】:

applicationreserved 基本上是标记。在查看他们的 Objective-c 文档时会更清楚:

disabled:UIControlStateDisabled = 1 << 1

application:UIControlStateApplication = 0x00FF0000

reserved:UIControlStateReserved = 0xFF000000

这意味着UIControlState 的第二个最低有效位例如负责确定UIControl 是否被禁用。来自17 - 24(从1 << 161 << 23)的所有位都供您的应用程序使用,而25 - 32(从1 << 241 << 31)供内部框架使用。

这基本上意味着 Apple 能够/允许在使用最低 16 位的同时定义控件的新状态标志,您可以保证能够将 8 位用于您自己的自定义标志。

可以定义自定义标志,例如通过:

let myFlag = UIControlState(rawValue: 1 << 18)

class MyButton : UIButton {
    var customFlags = myFlag
    override var state: UIControlState {
        get {
            return [super.state, customFlags]
        }
    }

    func disableCustom() {
        customFlags.remove(myFlag)
    }
}

可以通过

let myButton = MyButton()
print(myButton.state.rawValue) // 262144 (= 2^18)
myButton.isEnabled = false
myButton.isSelected = true
print(myButton.state.rawValue) // 262150 (= 262144 + 4 + 2)
myButton.disableCustom()
print(myButton.state.rawValue) // 6 (= 4 + 2) 

【讨论】:

  • 您的覆盖变量看起来像是返回了一个 UIControlState 数组,但它返回了一个带有状态和 customFlags XOR 的 UIControlState。这是怎么回事?
  • 谢谢。 Ole 的博客总是很好。好的,按位或,表示 XOR 将返回相同的结果; )
猜你喜欢
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多