2011-05-27 11 views
17

बदलने के लिए UITextField को उपclass और drawPlaceholderInRect को ओवरराइड कैसे करता हूं मेरे पास प्लेसहोल्डर टेक्स्ट सेट के साथ 3 UITextField है। UITextField में से एक पर मैं प्लेसहोल्डर टेक्स्ट लाल होना चाहता हूं।मैं प्लेसहोल्डर रंग

अब googling के बाद ऐसा लगता है कि ऐसा करने का सबसे अच्छा तरीका UITextField को उपclass करना है और drawPlaceholderInRect ओवरराइड करना है।

मैं drawPlaceholderInRect उप-वर्गीकरण और ओवरराइड करने के बारे में कैसे जा सकता हूं? मुझे इस पर कोई कोड उदाहरण या ट्यूटोरियल नहीं मिला है और मैं उद्देश्य-सी और आईओएस विकास के लिए नया हूं इसलिए इसे काम करने में मुश्किल लग रही है।

उत्तर:

एक नया उद्देश्य-सी वर्ग CustomUITextFieldPlaceholder कहा जाता है जो UITextField subclassed बनाया गया। CustomUITextFieldPlaceholder.m में अपनी परियोजना में निम्न कोड

@implementation CustomUITextFieldPlaceholder 

- (void)drawPlaceholderInRect:(CGRect)rect { 
    // Set colour and font size of placeholder text 
    [[UIColor redColor] setFill]; 
    [[self placeholder] drawInRect:rect withFont:[UIFont systemFontOfSize:12]]; 
} 

@end 

ऊपर लागू करने के लिए डाल दिया

#import "CustomUITextFieldPlaceholder.h" 

और

IBOutlet CustomUITextFieldPlaceHolder *txtName; 

नोट: यह काम करता है और मेरा मानना ​​है कि सही व्यवहार है, लेकिन मेरे पास है पूरी तरह से इसका परीक्षण नहीं किया। आशा है कि यह उदाहरण दूसरों को मेरी स्थिति में मदद करता है।

संपादित करें:

[[UIColor redColor] setFill]; 

बदल दिया

[[UIColor colorWithRed:255.0 green:0.0 blue:0.0 alpha:0.7] setFill]; 

तो मैं डिफ़ॉल्ट प्लेसहोल्डर नकल करने के लिए 70% तक की अस्पष्टता सेट कर सकते हैं कि के लिए।

+0

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

+0

हो सकता है कि आप इस प्रतिनिधि विधि को ओवरराइड करने का प्रयास कर सकें - '(शून्य) drawPlaceholderInRect: (CGRect) rect' – Hisenberg

उत्तर

7

आप किसी प्रश्न का जवाब करने के लिए, यह कैसे उपवर्गीकरण काम करता है:

@implementation 
- (CGRect)placeholderRectForBounds:(CGRect)bounds { 
    return CGRectMake(x,y,width,height); 
} 
@end 

हालांकि मुझे नहीं लगता कि विधि आप ओवरराइड करना चाहते है है:

// CustomTextField.h 
@interface CustomTextField : UITextField { 
} 
@end 

यहाँ विधि ओवरराइड करने का तरीका बताया । मुझे लगता है कि यह आपके लिए क्या देख रहे हैं:

@implementation 
- (void)drawPlaceholderInRect:(CGRect)rect { 
    // Your drawing code. 
} 
@end 
+0

आपके उत्तर @Erik के लिए धन्यवाद, आपका दाहिना मेरा मतलब drawPlaceholderInRect था।मुझे ऐसा करने के लिए कोड बनाने के लिए जाना होगा, उंगलियों को पार किया गया :) –

+0

लेकिन कक्षा बनाने और कार्यान्वयन में इस विधि को जोड़ने के बाद मुझे अपने टेक्स्टफील्ड प्लेसहोल्डर रंग –

0
[yourTextfield setValue:[UIColor colorWithRed:62.0/255.0f green:62.0/255.0f blue:62./255.0f alpha:1.0f] forKeyPath:@"_placeholderLabel.textColor"]; 

मुझे लगता है कि यह सहायक

+0

पर परिवर्तन नहीं मिला है कि अंडरस्कोर इसे काफी निजी दिखता है ... –

संबंधित मुद्दे