एक बटन अक्षम करें


95

मैं UIButtoniOS पर एक बटन ( ) को क्लिक करने के बाद अक्षम करना चाहता हूं । मैं iOS के लिए विकसित करने के लिए नया हूं लेकिन मुझे लगता है कि उद्देश्य पर समान कोड - C यह है:

button.enabled = NO;

लेकिन मैं ऐसा तेजी से नहीं कर सका।

जवाबों:


206

NOस्विफ्ट के लिए बूलियन मूल्य है false

button.isEnabled = false

करना चाहिए।

यहाँ के लिए स्विफ्ट प्रलेखन है UIControlकी isEnabledसंपत्ति।


यह वही है कि आपने बटन को इसके इनिलाइज़र के माध्यम से बनाया है या स्टोरीबोर्ड के माध्यम से।
KerrM

मेरा मतलब था जब मेरे पास कोई आउटलेट नहीं है। किसी भी तरह का समाधान विश्व स्तर पर बटन को परिभाषित करना है।
डैनियल स्प्रिंगर

43

यदि आप चाहते हैं कि बटन "दबाए" उपस्थिति के बिना स्थिर रहे:

// Swift 2
editButton.userInteractionEnabled = false 

// Swift 3
editButton.isUserInteractionEnabled = false 

याद है:

1) आपका IBOutletहै ->@IBOutlet weak var editButton: UIButton!

2) उपरोक्त कोड अंदर जाता है viewWillAppear


1
मुझे लगा कि यह वही है जो मैं देख रहा था, लेकिन यह केवल UIKit प्रतीत होता है, AppKit नहीं।
ड्रोटैंग

11

जिस तरह से मैं ऐसा करता हूं वह इस प्रकार है:

@IBAction func pressButton(sender: AnyObject) {
    var disableMyButton = sender as? UIButton
    disableMyButton.enabled = false
}

IBAction स्टोरीबोर्ड में आपके बटन से जुड़ा हुआ है।

यदि आपके पास आउटलेट के रूप में अपना बटन सेटअप है:

    @IBOutlet weak var myButton: UIButton!

तब आप सक्षम गुणों का उपयोग कर सकते हैं। बटन नाम पर संकेतन:

    myButton.enabled = false

स्विफ्ट 4 में मेरे लिए ठीक काम करता है। मैंने डिफ़ॉल्ट रूप से देखा कि यह किसी भी किसी भी के बजाय किसी भी प्रेषक को सेट करता है लेकिन दोनों अभी भी काम करते हैं .... आपको क्या त्रुटि हो रही है?
14

स्पष्टता के लिए, शायद आपको अपने उत्तर में यह बताना चाहिए कि आपके कोड को काम करने के लिए IBOutlet की आवश्यकता है। IBOutlet की आवश्यकता थी या नहीं, मुझे क्या उलझन थी। जाहिर है, इसकी जरूरत है।

यह काम करने के लिए आवश्यक नहीं है। आप IBA में बटन टाइप कर सकते हैं और सक्षम स्थिति बदल सकते हैं या यदि आपने इसे IBOutlet के रूप में सेट किया है तो आप इसे आउटलेट पर .notation का उपयोग करके कर सकते हैं। दोनों तरीके काम करते हैं।

मुझे विश्वास है कि IBOutlet की जरूरत है यदि आप बटन को किसी अन्य फ़ंक्शन के भीतर से अक्षम करना चाहते हैं।


5

उन लोगों के लिए जिन्होंने Googled ने "एक बटन अक्षम करें" लेकिन अधिक उपयोग किए जाने के मामले हो सकते हैं:

दृश्य प्रभाव के साथ अक्षम करें: जैसा कि दूसरों ने कहा है, यह बटन को दबाए जाने से रोकेगा और सिस्टम स्वचालित रूप से इसे अक्षम दिखाई देगा:

yourButton.isEnabled = false 

दृश्य प्रभाव के बिना अक्षम करें: क्या आप किसी ऐसे मामले में बटन का उपयोग कर रहे हैं, जहां उसे सामान्य दिखना चाहिए, लेकिन स्पर्श पर प्रतिक्रिया करके पसंद बटन का व्यवहार नहीं करना चाहिए? इसे इस्तेमाल करे!

yourButton.userInteractionEnabled = false

अक्षम किए बिना छिपाएं: यह दृष्टिकोण बटन को अक्षम किए बिना छुपाता है (अदृश्य लेकिन फिर भी टैप किया जा सकता है)

 yourButton.alpha = 0.0

निकालें: यह पूरी तरह से दृश्य को हटा देगा:

 yourButton.removeFromSuperView()

एक बटन के पीछे कुछ टैप करें: क्या दो बटन स्टैक्ड हैं और आप चाहते हैं कि शीर्ष बटन अस्थायी रूप से कार्य करे जैसे कि यह वहां नहीं है? यदि आपको फिर से शीर्ष बटन की आवश्यकता नहीं होगी, तो इसे हटा दें। यदि आपको फिर से इसकी आवश्यकता होगी, तो इसकी ऊँचाई या चौड़ाई को 0 पर संघनित करने का प्रयास करें!


1

आप एक बटन का उपयोग / संपत्ति को सक्षम / अक्षम कर isEnabledसकते isUserInteractionEnabledहैं।

दो के बीच का अंतर है:

  • isEnabledUIControl (UIButton के सुपर क्लास) की एक संपत्ति है और इसमें सक्षम / अक्षम करने के दृश्य प्रभाव (यानी धूसर हो गए) हैं

  • isUserInteractionEnabled UIView (UIControl के सुपर क्लास) की एक संपत्ति है और इसका कोई दृश्य प्रभाव नहीं है, लेकिन इस उद्देश्य को प्राप्त करता है

उपयोग:

myButton.isEnabled = false // Recommended approach

myButton.isUserInteractionEnabled = false // Alternative approach

क्या आप जानते हैं कि मुझे यह त्रुटि क्यों हो रही है? Value of type '(AnyObject) -> ()' has no member 'isEnabled'

यदि मैं बदलता हूं तो मुझे एक त्रुटि भी मिलती (_ sender: )है UIButton। त्रुटि पढ़ता है:Value of type '(UIButton) -> ()' has no member 'isEnabled'

0

मान लीजिए कि स्विफ्ट 4 में आपके पास IBActionइस तरह से एक सेगमेंट के लिए एक बटन सेट है @IBAction func nextLevel(_ sender: UIButton) {} और आपके ऐप (यानी एक टाइमर, गेमप्ले, आदि) के भीतर होने वाली अन्य क्रियाएं हैं। सेग बटन को अक्षम करने के बजाय, आप अपने उपयोगकर्ता को उस सेग का उपयोग करने का विकल्प देना चाह सकते हैं, जबकि अन्य क्रियाएं अभी भी हो रही हैं और एपीपी को हटाने के बिना । ऐसे:

var appMode = 0

@IBAction func mySegue(_ sender: UIButton) {

    if appMode == 1 {  // avoid crash if button pressed during other app actions and/or conditions
        let conflictingAction = sender as UIButton
        conflictingAction.isEnabled = false
    }
}

कृपया ध्यान दें कि आपके पास संभवतः अन्य शर्तें होंगी if appMode == 0और / या if appMode == 1जो अभी भी होंगी और mySegueबटन के साथ संघर्ष नहीं होगा । इस प्रकार, एक दुर्घटना को दूर करना


0

बटन को स्विफ्ट 4 में कोड द्वारा डिसेबल किया जा सकता है

@IBAction func yourButtonMethodname(sender: UIButon) {
 yourButton.isEnabled = false 
}

यदि आप अपने कोड को आज़माते हैं तो यह त्रुटि होनी चाहिए:Value of type '(AnyObject) -> ()' has no member 'isEnabled'

मुझे लगता है कि आपका मतलब है yourButton(sender: UIButton)। आपके अपडेट किए गए कोड में निम्नलिखित त्रुटि होने की संभावना होगी:Value of type '(UIButton) -> ()' has no member 'isEnabled'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.