2010-08-05 18 views

cevap

9

,

- (BOOL)textFieldShouldClear:(UITextField *)textField 

kullanıcıları textfield'ı temizlemek istediğinde denir işlevi. EVET'i döndürürseniz ve

klavyenin gitmesi gerekir. ClearButtonMode'u bilmiyorum, bunun dışında, tercihen görünümü süper görünümüne eklemeden önce, bunu erkenden ayarlamak isteyebilirsiniz.

[textField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1]; 
+0

Teşekkürler, yukarıdaki gibi textFieldShouldClear çağrılırken klavyenin neden gitmediği hakkında bir fikrin var mı? Örneğin textFieldShouldReturn ile çalışır. – Dan

+1

Evet, temizledikten sonra, UI güçleri yine de alana odaklanmış olabilir. Yanıtımıma eklediğim satırı kullanarak birazdan istifa etmeyi dene. – mvds

+1

Şerefe, gecikme problemi çözmüş gibi görünüyor! – Dan

5

gecikme etmedim'

düzenlemek Gerçekten, yanıtlayıcısını istifa biraz sonra o yapıyor deneyin emin olmak için Benim için iyi çalış. temsilci uygulanmasında Sonra

BOOL cancelEdit; 

: Onun yerine delegesinecevap bir örnek değişkeni eklendi Eğer alanını temizleyin sonra elma textfield odak ayarı gibi görünüyor önce

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    if (cancelEdit) { 
     cancelEdit = NO; 

     return NO; 
    } else { 
     return YES; 
    } 
} 

- (BOOL)textFieldShouldClear:(UITextField *)textField 
{ 
    cancelEdit = YES; 

    return YES; 
} 
+0

Bu en iyi çözümdür. – Shmidt

+0

Mükemmel çözüm, teşekkürler –

35

gibi bahsettiniz.

Çözüm oldukça basit. Sadece sahadan kendinizi, resignFirstResponder temizlemek ve ben bu garip davranış textFieldShouldClear önce klavyenin önceki ilk yanıtlayıcısını istifa rakip bir jest tanıyıcı neden oldu keşfetti YOK

-(BOOL)textFieldShouldClear:(UITextField *)textField 
    { 
     textField.text = @""; 
     [textField resignFirstResponder]; 

     return NO; 
    } 
+0

Benim için en iyi çözüm! Çok teşekkürler! –

+0

Kullanıcı temizle düğmesine basılırsa klavyeyi göstermemek istiyorum, ancak klavye gösteriliyorsa, onu gizlemek istemiyorum. Ben sadece [textField resignFirstResponder]; 'yukarıdaki koddan kaldırıyorum. –

0

dönmek: denirdi. İlk cevaplayıcıyı bozmak gibi görünüyordu.

Eğer bu şekilde ayarladıysanız, jest tanıyıcınızdakiTouchesInView iptalini YES olarak ayarladığınızdan emin olun. Bu şekilde textFieldShouldClear'da özel bir şey yapmanıza gerek yoktur: veya textFieldShouldBeginEditing: temsilci yöntemleri.