2017-05-03 8 views
6

मैं भी apple doc माध्यम से चला गया, लेकिन यह सिर्फ कहा गया है कि इसकेUIButton के UIControlState "एप्लिकेशन" का उपयोग क्या है?

अतिरिक्त नियंत्रण राज्य आवेदन उपयोग के लिए उपलब्ध झंडे।

यह सिर्फ एक गेटर विधि है, तो यह कब सेट हो जाता है?

+0

के माध्यम से इस्तेमाल किया जा सकता है जो मुझे लगता है कि आपके सवाल का शरीर + शीर्षक थोड़ा भ्रामक है के बाद से 'UIControlState.application' बिल्कुल' UIButton' के लिए विशिष्ट नहीं है, और यह या तो एक विधि नहीं है। क्या आप पूछ रहे हैं कि 'UIControlState.application' का उपयोग क्या है और किसी भी यूआई-तत्व की' राज्य 'संपत्ति' .plication' मान मानती है? – luk2302

+0

इसे देखें: https: //developer.apple.com/reference/uikit/uicontrolstate – KKRocks

+0

@KKRocks मुझे लगता है कि ओपी ने देखा कि पहले से ही उद्धृत वाक्य बिल्कुल वही है। – luk2302

उत्तर

2

application और reserved मूल रूप से मार्कर हैं।

disabled: UIControlStateDisabled = 1 << 1

application: UIControlStateApplication = 0x00FF0000

reserved: कि जब उनके लिए उद्देश्य-सी प्रलेखन को देख और अधिक स्पष्ट है UIControlStateReserved = 0xFF000000

इसका मतलब है कि एक के दूसरे कम से कम महत्वपूर्ण बिट उदाहरण के लिए UIControlState गीलेर को निर्धारित करने के लिए ज़िम्मेदार है या नहीं UIControl अक्षम है या नहीं। 17 - 24 से 0 बिट्स (1 << 16 से 1 << 23 तक) 25 - 32 (1 << 24 से 1 << 31 तक) उपयोग करने के लिए आंतरिक ढांचे के लिए हैं।

इसका मूल अर्थ यह है कि ऐप्पल सबसे कम 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) 
+0

आपका ओवरराइड वैर दिखता है जैसे यह यूआईसींट्रोलस्टेट की एक सरणी देता है फिर भी यह राज्य के साथ एक यूआईसींट्रोलस्टेट देता है और कस्टमफ्लैग एक साथ XOR'ed करता है। यह कैसा है? – Brynjar

+1

@ ब्रायनजर https://oleb.net/blog/2016/09/swift-option-sets/ - वे ['ExpressibleByArrayLiteral'] (https://developer.apple.com/documentation/swift/expressiblebyarrayliteral) के अनुरूप हैं – luk2302

+0

@ ब्रायनगर और यह 'एक्सओआर' की तरह काम नहीं करता है, यह थोड़ा सा 'या' या बस '+' है क्योंकि दो अलग-अलग झंडे में कोई भी बिट '1' नहीं है। – luk2302