2011-12-21 22 views
8

तो, मैं बजाय एक FXLabel का एक उदाहरण के लिए एक UIButton पर UILabel बदलने के लिए कोशिश कर रहा हूँ। FXLabel (https://github.com/nicklockwood/FXLabel) पर और अधिक के लिए लिंक देखें। मुझे क्लास एक्सटेंशन (Subclass UIButton to add a property) का उपयोग करके पता है, मैं अपने मामले में, FXLabel को मूल रूप से एक सबव्यूव जोड़कर हमेशा एक और संपत्ति जोड़ सकता हूं। हालांकि, मुझे पहले से मौजूद titleLabel संपत्ति की सुविधा और सुविधाएं पसंद हैं।क्या मैं * UILabel को UXButton पर FXLabel के साथ प्रतिस्थापित कर सकता हूं?

क्या UILabel को FXLabel के लिए सबक्लास या श्रेणी द्वारा "स्विच" करने का कोई तरीका है?

मैं जानता हूँ कि मैं ऐसा कर सकता है, लेकिन यह इस तरह के एक हैक है और भविष्य के सबूत नहीं है। और मुझे नहीं पता कि क्लास प्रकार को कैसे बदलें (Get UILabel out of UIButton)।

UILabel *label; 
for (NSObject *view in button.subviews) { 
    if ([view isKindOfClass:[UILabel class]]) { 
     label = (UILabel *)view; 
     break; 
    } 
} 

विचार ?? धन्यवाद।

उत्तर

5

यहां एक और तरीका है जिससे आप कम से कम लेबल तक पहुंच सकते हैं। UIButton का उप-वर्ग बनाएं, और उस सबक्लास में layoutSubviews ओवरराइड करें।

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    UILabel *titleLabel = [self titleLabel]; 
} 

अब हम अभी भी उस लेबल बदल रहा है एक उपवर्ग होने के लिए की समस्या के साथ फंस रहे हैं: वहां से आप सीधे लेबल पहुँच सकते हैं। मुझे लगता है कि आप गतिशील रूप से आपकी FXLabel उपवर्ग के साथ UILabel के वर्ग स्वैप करने के लिए (विस्तृत here के रूप में) की कोशिश कर सकते हैं, लेकिन ईमानदार कि बहुत जोखिम भरा है किया जाना है।

मैं कहना चाहता हूँ कि आप से बेहतर कर रहे हैं बस अपने खुद के UIControl बनाने है कि आप अपने दिल की सामग्री के लिए अनुकूलित कर सकते हैं। कोई जोखिम नहीं, सिर्फ शुद्ध भलाई। एक साधारण UIButton की नकल करना बहुत कठिन नहीं होना चाहिए। सौभाग्य!

+0

टिप के लिए धन्यवाद। मुझे लगता है कि मैं सिर्फ अपनी खुद की कस्टम कक्षा बनाने की कोशिश करूंगा। अगर मैं कोई और मुझे कुछ बेहतर नहीं देता तो मैं इसे अपने प्रश्न का उत्तर देने के रूप में चिह्नित करूंगा। धन्यवाद! –

+1

मैंने अभी इसे हैक किया है और वास्तव में बटन पर टेक्स्ट सेट किए बिना बटन के शीर्ष पर लेबल जोड़ा है। अब मुझे अल्फा परिवर्तन आदि के लिए दो गुणों का ट्रैक रखना है, लेकिन यह मेरा खुद का यूआईसींट्रोल बनाने की कोशिश करने से कहीं अधिक आसान है। मैं भविष्य में इस पर काम करूंगा और देख सकता हूं कि मुझे कुछ मिलता है या नहीं –

1

क्षमा करें यह कहना लेकिन मुझे नहीं लगता कि आप किसी भी विश्वसनीय तरीके से ऐसा कर सकते हैं करते हैं। भले ही आपने UIButton को उप-वर्गीकृत किया हो और titleLabel विधियों को ओवरराइड करें, आपको राज्य सेटिंग्स को भी संभालना होगा। और आप कभी नहीं जानते कि आंतरिक कोड सीधे लेबल के लिए निजी ivar को संदर्भित करता है।

मैंने अपने ऐप्स के लिए कुछ समान करने के लिए UIButton का एक उप-वर्ग बनाया (कस्टम बटन लेआउट & सबव्यूज़), क्षमा करें, मैं इसे अभी साझा नहीं कर सकता, यह एक ग्राहक के स्वामित्व में है। अपने स्वयं के सबव्यूव के लिए अपना खुद का राज्य हैंडलिंग कोड बनाना मुश्किल नहीं है।

+0

सहायता के लिए धन्यवाद। मैं देखूंगा कि मैं एक साथ क्या रख सकता हूं। –