9

प्रतीक्षा करें !!!:
मुझे पता है कि आप सोच सकते हैं कि इस प्रश्न से पूछा गया है और कई बार जवाब दिया गया है। लेकिन मैं गारंटी गारंटी दे सकता हूं कि यह प्रश्न अद्वितीय है।आईओएस UIButton - UIButton setUserInteractionEnabled और setEnabled

प्रश्न:
एक iOS एप्लिकेशन में, बस कल्पना छवि bellow में दिखाया गया है जैसे दो बटन, देखते हैं, और वे दो क्रियाएं हैं जो एक टॉगल तर्क की तरह बर्ताव करता है।

enter image description here

और यह तर्क इस प्रकार हो सकते हैं:

- (IBAction)testBtnClicked:(id)sender { 
    if ([self.testBtn isEnabled]) { 
     [self.testBtn setEnabled:NO]; 
     [self.setInteractionBtn setUserInteractionEnabled:YES]; 
    } else { 
     [self.testBtn setEnabled:YES]; 
     [self.setInteractionBtn setUserInteractionEnabled:NO]; 
    } 
} 

- (IBAction)setInteractionBtnClicked:(id)sender { 
    if ([self.setInteractionBtn isEnabled]) { 
     [self.setInteractionBtn setUserInteractionEnabled:NO]; 
     [self.testBtn setEnabled:YES]; 
    } else { 
     [self.setInteractionBtn setUserInteractionEnabled:YES]; 
     [self.testBtn setEnabled:NO]; 
    } 
} 

तो मैं setEnabled विधि और setUserInteractionEnabled विधि बीच एक बड़ा अंतर नहीं दिख रहा। वे एक ही विधि की तरह व्यवहार करते हैं जो उपयोगकर्ता को इसका उपयोग करने की अनुमति नहीं देता है। हालांकि अगर यह समान है, तो हम isEnabledtrue या false का पता लगाने में सक्षम कैसे हो सकते हैं, भले ही setUserInteractionEnabledFalse हो?

निम्न कारणों से जो इस सवाल नहीं अतः में एक और क्यू & एक थ्रेड के संभावित डुप्लिकेट कर रहे हैं:

  • हालांकि कुछ उच्च स्थान कोड एक संभव डुप्लीकेट के रूप में मेरे सवाल चिह्नित हो सकता है, कि क्यू & ए ने मुझे सही समझ नहीं दी।
  • रूप @danh कहा,

    कम से कम एक कारण यह है कि एनीमेशन के दौरान, उपयोगकर्ता संपर्क UIViews पर अक्षम किया गया है है। नियंत्रण के लिए यह गलत होगा एनिमेटेड होने पर ग्रिड आउट के रूप में। तो कम से कम एनीमेशन के दौरान, दो गुणों के अलग-अलग अर्थ हैं। मुझे असली जवाब या यह देखने का कारण दिया कि ये दो विधियां दो कारणों से हैं। क्योंकि कोई भी कह सकता है कि setUserInteractionEnabled यूआई राज्य में बदलाव नहीं करता है, लेकिन कम से कम केवल @ दन्हा के उत्तर पर पहले कहा गया था कि इसका उपयोग यूआई एनिमेशन के दौरान पूरी तरह से किया जा सकता है।

+0

की [कौन सा बेहतर है, setEnabled या setUserInteractionEnabled?] (संभावित डुप्लिकेट http://stackoverflow.com/questions/15649264/which-is- बेहतर-सेटनेबल-या-सेटसरिनरटेक्शनएनेबल) – HDdeveloper

+0

असल में यह नहीं है। क्योंकि यह पूछ रहा है कि वह अंतर जानता है और उस प्रश्नावली को सिर्फ यह जानने की जरूरत है कि दोनों से बेहतर क्या है। लेकिन मेरा सवाल यह है कि मुझे यह जानने की ज़रूरत है कि क्या सही अंतर है और किस का उपयोग करना है आशा है कि आप इसे दो अलग-अलग प्रश्नों को समझ सकते हैं। :-) –

उत्तर

13

वे लगभग समान हैं। userInteractionEnabledUIView की एक संपत्ति है जो इस बात को टॉगल करती है कि दृश्य को कोई उपयोगकर्ता स्पर्श प्राप्त करता है या नहीं। enabledUIControl की एक संपत्ति है (जो UIView का उप-वर्ग है और UIButton का सुपरक्लास है) और इसका एक ही प्रभाव है। एक अंतर यह है कि UIKit नियंत्रण enabled स्थिति के आधार पर खुद को अलग-अलग आकर्षित कर सकते हैं, जो सार UIView के मामले में नहीं है।

ठीक है, तो क्यों?

UIControl सबक्लास के उत्तराधिकारी दोनों के उत्तराधिकारी हैं, वहां दो लगभग समान गुण क्यों हैं? नियंत्रण क्यों नहीं करते हैं "सक्षम" के विचार को छोड़ दें और अपने userInteractionEnabled राज्य के आधार पर अलग-अलग आकर्षित करें?

कम से कम एक कारण यह है कि एनीमेशन के दौरान, उपयोगकर्ता इंटरैक्शन UIView एस पर अक्षम है। एनिमेटेड होने पर नियंत्रणों के लिए खुद को आकर्षित करने के लिए नियंत्रण गलत होगा। तो कम से कम एनीमेशन के दौरान, दोनों गुणों का अलग अर्थ होता है।

3

के लक्षण सक्षम:

  • यह UIButton के लिए UIControl
  • सुपर क्लास की एक संपत्ति है।
  • यह वस्तु के दृश्य स्थिति पर असर पड़ता है और आम तौर पर के नियंत्रण

लक्षण अक्षम करने userInteractionEnabled की पसंदीदा तरीका है:

  • UIView की संपत्ति
  • कोड जो आपके नियंत्रणों के साथ इंटरैक्ट करता है, यह जांचने की अधिक संभावना है कि बटन enabled हैं, यदि उनके userInteractionEnabled प्रोपे आरटीई सेट है। यह अधिक पारंपरिक है।
1
@property(nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled 

एक बूलियन मान निर्धारित करता है कि उपयोगकर्ता की घटनाओं पर ध्यान नहीं दिया और घटना कतार से निकाल दिया है या नहीं। जब सेट पर सेट किया गया है, तो उपयोगकर्ता ईवेंट-जैसे स्पर्श और कीबोर्ड-दृश्य के लिए इच्छित इवेंट कतार से अनदेखा और हटा दिया जाता है। जब YES पर सेट किया जाता है, तो सामान्य रूप से ईवेंट को ईवेंट वितरित किए जाते हैं। इस संपत्ति का डिफ़ॉल्ट मूल्य हां है।

चर्चा:

एक एनीमेशन के दौरान, उपयोगकर्ता बातचीत अस्थायी रूप से एनीमेशन में शामिल सभी विचारों के लिए इस संपत्ति में अक्षम हैं, मूल्य की परवाह किए बिना। एनीमेशन को कॉन्फ़िगर करते समय आप UIViewAnimationOptionAllowUserInteraction विकल्प निर्दिष्ट करके इस व्यवहार को अक्षम कर सकते हैं।

Apple Doc on UIView

@property(nonatomic, getter=isEnabled) BOOL enabled 

एक बूलियन मान निर्धारित करता है कि रिसीवर सक्षम है या नहीं।

चर्चा:

हाँ नियंत्रण सक्षम बनाने के लिए निर्दिष्ट करें; अन्यथा, इसे अक्षम करने के लिए NO निर्दिष्ट करें। डिफ़ॉल्ट वैल्यू हां है। यदि सक्षम स्थिति नहीं है, तो नियंत्रण स्पर्श घटनाओं को अनदेखा करता है और उप-वर्ग अलग-अलग आकर्षित कर सकते हैं।

आपके संदर्भ के लिए:

  1. Apple Doc on UIControl
  2. SO Q&A

@danh में कहा गया है के रूप में:

"एल ई ऐज़ पर टी एक कारण यह है कि एनीमेशन के दौरान, उपयोगकर्ता बातचीत UIViews पर अक्षम है। नियंत्रण के लिए यह गलत होगा एनिमेटेड होने पर ग्रिड आउट के रूप में। तो कम से कम एनीमेशन के दौरान, दो गुण अलग अर्थ है। "