2014-04-03 17 views
7

UISearchBar'u geri almayı denediğimde uygulamanız çöküyor. Benim app ben arama çubuğunda bir '%' işareti girmesini engellemeye kodu bulunan ve bu iş için o bir% değiştirir @ ": abc" olarak aşağıda textDidChange yönteminde Yani"[NSBigMutableString substringWithRange:]: Aralık {0, 10} sınırlar dışı; string length 9" hatası Geri Al ile

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""]; 
} 

Metin yazarsanız" % xyz ", arama çubuğunda görünen son metin" abcxyz "olacaktır. Geri alma işlemini tıklattığımda, 'xyz' ifadesinin temizlendiğini görüyorum ve arama çubuğunda 'abcxyz' özelliğini bir seferde silmek yerine hala 'abc' görüyorum.

'abc' uygulamasını silmek için tekrar geri al 'ı tıklatırsam, uygulama çöktü [NSBigMutableString substringWithRange:]: Range out of bounds hatası ile.

'%' yerine @ "" ile değiştirilse bile, geri alma yöneticisi hala tutuyor olabilir ve dolayısıyla aralık sınırların dışına çıkmaktadır.

textDidChange numaralı telefondan [searchBar.undoManager removeAllActions];'u denedim, ancak% "@" ile değiştirdikten sonra yardımcı olmadı. İşte kod:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
    { 
     self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""]; 
     [searchBar.undoManager removeAllActions]; 
    } 

Soru: Herkes önce benzer sorunla karşı karşıya? Geri almayı nasıl ele alabilirim?

+0

removaAllActions benim için çalıştı rağmen. Son olarak, uygulamamız için geri almak için sallantıyı kapatmayı seçtik. – SuperGuyAbe

cevap

1

yerine bu temsilci yöntemi kullanarak edilmelidir:

 - (BOOL)searchBar:(UISearchBar *)searchBar 
    shouldChangeTextInRange:(NSRange)range 
      replacementText:(NSString *)text 

Ve her ihtimale karşı HAYIR dönmek replacementText "%" eşittir. Bu, kullanıcının metin alanını güncellemediği için ilk etapta kullanmasını engeller.

Çözüm

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    if([text isEqualToString:@"%"]) { 
     return NO; 
    } 

    return YES; 
} 
İlgili konular