2010-01-03 31 views

cevap

26

Sen de (anahtar-değer gözlemciler göre bakımı daha kolay IMHO) UITextFieldDelegate yöntemleri kullanmak olabilir:

#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; 
} 

gözlemci de Sonra

[textField addObserver:theObserver forKeyPath:@"isFirstResponder" options:0 context:nil]; 

Bu, yalnızca UITextField.borderStyle özelliği herhangi bir türde ancak UITextBorderStyleRoundedRect (bu durumda arka plan özelliği dikkate alınmaz) olduğunda çalışır. Bu borderStyle belgelerinde açıklandığı şekilde, UITextBorderStyleBezel, UITextBorderStyleLine ve UITextBorderStyleNone ile yukarıdaki kodu kullanabilirsiniz anlamı:

borderStyle

metin alanı kullandığı Sınır tarzı.

@property (nonatomic) UITextBorderStyle borderStyle

Tartışma

bu özellik için varsayılan değer UITextBorderStyleNone olduğunu. Özel bir arka plan resmi ayarlanırsa, bu özellik dikkate alınmaz.

arka plan

o etkinleştirildiğinde metin alanın arka plan görünümünü temsil resim:

Bu

UITextField arka plan özelliği için belgelerdir.

@property (nonatomic, korumak) UIImage * arka plan

Tartışma

seti, görüntü bu özellik borderStyle özelliği ile kontrol standart görünümünü değiştirir tarafından anılan

. Arka plan görüntüler, görüntünün kenarlık dikdörtgen kısmında çizilir. Resimlerin metin alanının arka planında kullanması için 'u sığdırması gerekir.

+0

borderStyle hakkında konuştuğunuz için teşekkürler. Bu UITextField – DonnaLea

+0

arka plan özelliği için belgelerinde belirtilmelidir. Metninizde bir hata buldum. UITextField yuvarlak açılıysa, tüm arka plan görüntülerini yok sayar. Tam tersi – Gargo

0

Muhtemelen isFirstResponder Değişikliklerin gözlemleyerek deneyebilirsiniz. ve bildirim yöntemindeki arka planı değiştirir. Bir şey gibi:

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

İlk kez ne zaman çekileceğini nasıl kontrol edeceğimi biliyorum Yanıtlayıcıyı yanıtla ancak arka plan görüntüsünü nasıl değiştirebilirim? –

+0

textField katman içeriğini bir CGImage olarak değiştirebilir textField.layer.contents = myImage.CGImage; çalışmalıdır. – Elfred

26

en temiz yolu IMHO UITextField alt sınıf ve metin alanının arka plan görüntüsünü değiştirmek için becomeFirstResponder ve resignFirstResponder geçersiz etmektir. Bu şekilde, arka planınızı değiştirmek için temsilci yöntemlerini yeniden kullanmak zorunda kalmadan yeni alt-sınıfınızı istediğiniz yerde kullanabilirsiniz.

+0

Çok zeki, teşekkürler – Dvole

+0

Temiz, subjektiftir, kompozisyonun savunucuları temiz çözümün farklı tadına sahiptir. –

İlgili konular