2014-10-14 8 views
20

मैं चयनस्विफ्ट - UIButton अधिभावी

क्या ObjC में - (void)setSelected:(BOOL)selected अधिभावी की स्विफ्ट में बराबर होगा पर कस्टम ड्राइंग और एनीमेशन प्रदर्शन करने के लिए स्विफ्ट में एक UIButton उपवर्ग बना रही हूँ setSelected?

मैंने कोशिश की

override var selected: Bool

तो मैं एक पर्यवेक्षक को लागू कर सकता है, लेकिन मैं

Cannot override with a stored property 'selected'

उत्तर

47

अन्य लोगों की तरह आप परिवर्तनों का पता लगाने के लिए willSet का उपयोग कर सकते हैं। हालांकि, ओवरराइड में, आपको सुपर को मान असाइन करने की आवश्यकता नहीं है, आप केवल मौजूदा परिवर्तन को देख रहे हैं।

कुछ बातें आप निम्नलिखित खेल का मैदान से पालन कर सकते हैं:

  1. willSet/didSet के लिए एक संपत्ति ओवरराइड करना अभी भी get/set के लिए सुपर कहता है। आप बता सकते हैं क्योंकि राज्य .normal से .selected में बदलता है।
  2. willSet और didSet भी जब मान परिवर्तित नहीं किया गया है कहा जाता है, तो आप शायद या तो willSet या didSet में oldValue में newValue निर्धारित करने के लिए किया जाए या नहीं चेतन करने के लिए selected के मूल्य की तुलना करना चाहते हैं।
import UIKit 

class MyButton : UIButton { 

    override var isSelected: Bool { 
     willSet { 
      print("changing from \(isSelected) to \(newValue)") 
     } 

     didSet { 
      print("changed from \(oldValue) to \(isSelected)") 
     } 
    } 
} 

let button = MyButton() 

button.state == .normal 
button.isSelected = true // Both events fire on change. 
button.state == .selected 
button.isSelected = true // Both events still fire. 
+2

** SWIFT3 ** 'चयनित' में किया गया है का नाम बदलकर 'चुना गया है' ... कृपया अपडेट करें :) – Husam

+0

@ हुसम अपडेट किया गया। :) –

0

प्राप्त इस

override public var selected: Bool { 
    willSet(selectedValue) { 
     self.selected = selectedValue 
     // Do whatever you want 
    } 
} 
+0

Xcode मुझे एक चेतावनी देता है और आंतरिक के साथ सार्वजनिक को बदलने के लिए पता चलता है। क्या आप कृपया बता सकते हैं कि आंतरिक कीवर्ड क्यों आवश्यक है? धन्यवाद। – LorTush

+0

आंतरिक का उपयोग करके आप कह रहे हैं कि आप उसी मॉड्यूल से var तक पहुंच सकते हैं। आपको यहां अधिक जानकारी मिली है: http://www.codingricky.com/access-control-in-swift/ उम्मीद है कि यह मदद करता है :) – diegomen

6

आप इसे जैसे कैसा लगा था की कोशिश यह:

class MyButton : UIButton { 

    // ... 

    override var isSelected: Bool { 
     willSet(newValue) { 
      super.isSelected = newValue; 
      // do your own business here... 
     } 
    } 

    // ... 

} 
+0

ठीक है यह मरने से सुझाए गए सार्वजनिक/आंतरिक कीवर्ड के बिना भी काम करता है। मुझे त्रुटि मिल रही थी क्योंकि मैंने अभी तक पर्यवेक्षक के साथ {} शामिल नहीं किया था, मुझे मूर्खतापूर्ण ... लेकिन मुझे अभी भी समझ में नहीं आता कि वे अनिवार्य क्यों हैं ... – LorTush

0

IBAction बनाएँ और जाँच बटन चयनित या तेज भाषा में नहीं।

@IBAction func favoriteButtonAction(sender: UIButton) { 

    // Save Data 
    sender.selected = !sender.selected; 

    if (sender.selected) 
    { 
     NSLog(" Not Selected"); 
    } 
    else 
    { 
     NSLog(" Selected"); 
    } 

}