2010-01-03 15 views
10

मैं यूआईटीएक्स्टफिल्ड की पृष्ठभूमि छवि को बदलना चाहता हूं, जब यह पहली बार बन जाता है कि उपयोगकर्ता को यह दिखाने के लिए कि यह फोकस है, सक्रिय: या सीएसएस में फोकस छद्म वर्ग।संपादन शुरू होने पर UITextField पृष्ठभूमि बदलें

मुझे लगता है कि मुझे यह प्रोग्रामेटिक रूप से करने की आवश्यकता हो सकती है; इसलिए किसी भी मदद की सराहना की है।

-Giles

उत्तर

26

साथ ही आप (मुख्य मान पर्यवेक्षकों से बनाए रखने के लिए, IMHO आसान) UITextFieldDelegate तरीकों का उपयोग कर सकते हैं:

#pragma mark - 
#pragma mark UITextFieldDelegate methods 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    _field.background = [UIImage imageNamed:@"focus.png"]; 
    return YES; 
} 

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField 
{ 
    _field.background = [UIImage imageNamed:@"nofocus.png"]; 
    return YES; 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    return YES; 
} 

[textField addObserver:theObserver forKeyPath:@"isFirstResponder" options:0 context:nil]; 
तो पर्यवेक्षक में

यह केवल तभी काम करता है जब UITextField.borderStyle प्रॉपर्टी किसी भी प्रकार का है लेकिन UITextBorderStyleRoundedRect (उस स्थिति में, पृष्ठभूमि संपत्ति को ध्यान में नहीं रखा जाता है)। इसका मतलब है आप UITextBorderStyleBezel, UITextBorderStyleLine और UITextBorderStyleNone साथ ऊपर कोड का उपयोग हो सकता है, के रूप में BorderStyle दस्तावेज में विस्तार से बताया:

BorderStyle

सीमा पाठ क्षेत्र द्वारा इस्तेमाल किया शैली।

@property (nonatomic) UITextBorderStyle BorderStyle

चर्चा

इस संपत्ति के लिए डिफ़ॉल्ट मान UITextBorderStyleNone है। यदि कोई कस्टम पृष्ठभूमि छवि सेट है, तो यह गुण अनदेखा किया जाता है।

पृष्ठभूमि

छवि है कि पाठ क्षेत्र की पृष्ठभूमि उपस्थिति का प्रतिनिधित्व करता है जब यह सक्षम है:

यह UITextField की पृष्ठभूमि संपत्ति के लिए दस्तावेज़ है।

@property (nonatomic, को बनाए रखने) UIImage * पृष्ठभूमि

चर्चा

जब सेट, छवि इस संपत्ति मानक उपस्थिति BorderStyle संपत्ति के द्वारा नियंत्रित की जगह से संबोधित किया जाता। पृष्ठभूमि छवियों को छवि के आयताकार भाग में खींचा गया है। छवियाँ आप टेक्स्ट फ़ील्ड के पृष्ठभूमि के लिए उपयोग करने के लिए को फिट करने में सक्षम होना चाहिए।

+0

सीमा स्टाइल के बारे में उल्लेख करने के लिए धन्यवाद। UITextField – DonnaLea

+0

की पृष्ठभूमि संपत्ति के लिए दस्तावेज़ में इसका उल्लेख किया जाना चाहिए मुझे आपके टेक्स्ट में कोई गलती मिली है। यदि UITextField गोलाकार कोणों के साथ है तो यह सभी पृष्ठभूमि छवियों को अनदेखा करता है। इसके विपरीत – Gargo

0

आप शायद isFirstResponder में परिवर्तन के लिए अवलोकन कर सकते हैं। और अधिसूचना विधि में पृष्ठभूमि बदल रहा है। कुछ की तरह:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    if(object == textField && [keyPath isEqual:@"isFirstResponder"]) { 
     //fiddle with object here 
    } 
} 
+0

मुझे पता है कि यह कब होता है यह जांचने के लिए कैसे करें लेकिन मैं वास्तव में पृष्ठभूमि छवि को कैसे बदलूं? –

+0

आप टेक्स्टफिल्ड की परत सामग्री को CGImage textField.layer.contents = myImage.CGImage में बदल सकते हैं; काम करना चाहिए। – Elfred

26

स्पष्ट तरीका IMHO UITextField उपवर्ग और becomeFirstResponder और resignFirstResponder ओवरराइड पाठ क्षेत्र की पृष्ठभूमि छवि बदलने के लिए है। इस तरह, आप पृष्ठभूमि को बदलने के लिए प्रतिनिधि विधियों को फिर से लागू किए बिना कहीं भी अपने नए उप-वर्ग का उपयोग कर सकते हैं।

- (BOOL)becomeFirstResponder { 
    BOOL outcome = [super becomeFirstResponder]; 
    if (outcome) { 
     self.background = // selected state image; 
    } 
    return outcome; 
} 

- (BOOL)resignFirstResponder { 
    BOOL outcome = [super resignFirstResponder]; 
    if (outcome) { 
     self.background = // normal state image; 
    } 
    return outcome; 
} 
+0

बहुत चालाक, धन्यवाद – Dvole

+0

स्वच्छतम व्यक्तिपरक है, संरचना के समर्थकों के पास सबसे साफ समाधान का अलग-अलग स्वाद है। –

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