2017-05-03 1 views
6

나는 너무 apple doc 겪었지만 그냥 상태 해당 응용 프로그램이 사용할 수의UICutton의 UIControlState "응용 프로그램"의 용도는 무엇입니까?

추가 컨트롤 상태 플래그.

그냥 getter 메소드가 언제 설정 되나요?

+0

를 통해 사용할 수 있습니다
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) } } 

가 나는'UIControlState.application' 전혀 UIButton' '에 해당하지 않기 때문에 귀하의 질문에 본체 + 제목이 약간 오해의 소지가 생각하고, 방법이 아닙니다. 'UIControlState.application'의 사용법과 UI 요소의'state' 속성이 언제'.application' 값으로 간주되는지 묻고 있습니까? – luk2302

+0

다음을 참조하십시오 : https : //developer.apple.com/reference/uikit/uicontrolstate – KKRocks

+0

@KKRocks OP는 인용 된 문장이 정확히 동일하므로 이미 OP가 본 것으로 생각합니다. – luk2302

답변

2

applicationreserved은 기본적으로 마커입니다.

disabled : UIControlStateDisabled = 1 << 1

application : UIControlStateApplication = 0x00FF0000

reserved : 그들을위한 목적-C 문서를 볼 때 그것은 더욱 분명하다 UIControlStateReserved = 0xFF000000

의미하는의 두 번째 최하위 비트 UIControlState은 예를 들어 UIControl이 비활성화되어 있는지 여부를 결정합니다. 17 - 24 (1 << 16부터 1 << 23까지)의 모든 비트는 응용 프로그램에서 사용하기 위해 사용되며 내부 프레임 워크는 25 - 32 (1 << 24 ~ 1 << 31)입니다.

기본적으로 Apple은 가장 낮은 16 비트를 사용하면서 컨트롤의 새로운 상태 플래그를 정의 할 수 있다는 것을 의미합니다. 자신의 맞춤 플래그에 8 비트를 사용할 수 있다는 보장이 있습니다.

맞춤 플래그 정의는 예 : 를 통해 :

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) 
+0

당신의 재정의 var는 UIControlState의 배열을 반환하는 것처럼 보입니다. 그러나 state와 customFlags가 함께 XOR 된 UIControlState를 반환합니다. 방법이있다? – Brynjar

+1

@Brynjar https://oleb.net/blog/2016/09/swift-option-sets/ - ['ExpressibleByArrayLiteral']을 준수합니다 (https://developer.apple.com/documentation/swift/expressiblebyarraititeral) – luk2302

+0

@Brynjar와'XOR'처럼 작동하지 않습니다. 두 개의 다른 플래그에서 하나의 비트가 '1'이 아니므로 비트 OR 또는 간단히 '+'입니다. – luk2302

관련 문제