“:范围{0,10}越界; string长度9“与撤消错误
当我尝试在UISearchBar
撤消时,我的应用程序崩溃。 在我的应用程序,我有代码,以防止在search栏上input“%”符号,为此,它将textDidChange方法中的%replace为@“”,如下所示:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""]; }
所以,如果我input文字“abc%xyz”,search栏上显示的最终文字就是“abcxyz”。 不,当我点击撤消,我看到'xyz'被清除,我仍然在search栏上看到'abc',而不是一次清除'abcxyz'。
现在,如果我再次点击撤消清除'abc'我的应用程序崩溃与[NSBigMutableString substringWithRange:]: Range out of bounds
错误。
我假设即使'%'被replace为@“”,撤销pipe理器可能仍然持有它,因此范围超出了界限。
我试过[searchBar.undoManager removeAllActions];
在用@“replace%后的textDidChange
,但是没有帮助。 这里是代码:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""]; [searchBar.undoManager removeAllActions]; }
问题:以前有人遇到类似的问题吗? 我如何处理撤消?
你应该使用这个委托方法:
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
如果replacementText等于“%”,则返回NO。 这将阻止用户在第一时间使用它,因为它不会更新文本字段,这应该解决您所遇到的撤销问题。
解
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if([text isEqualToString:@"%"]) { return NO; } return YES; }