- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当我尝试在 UISearchBar
上执行撤消操作时,我的应用程序崩溃了。在我的应用程序中,我有代码来防止在搜索栏上输入“%”符号,为此它在 textDidChange 方法中将 % 替换为 @"",如下所示:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""];
}
因此,如果我输入文本“abc%xyz”,搜索栏上显示的最终文本将是“abcxyz”。不,当我单击撤消时,我看到“xyz”被清除,我仍然在搜索栏上看到“abc”,而不是一次性清除“abcxyz”。
现在,如果我再次单击撤消以清除“abc”,我的应用程序会因 [NSBigMutableString substringWithRange:]: Range out of bounds
错误而崩溃。
我假设即使 '%' 被替换为 @"",撤消管理器可能仍持有它,因此范围超出范围。
在将 % 替换为 @""后,我在 textDidChange
中尝试了 [searchBar.undoManager removeAllActions];
,但它没有帮助。这是代码:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""];
[searchBar.undoManager removeAllActions];
}
问题: 以前有人遇到过类似的问题吗?我如何处理撤消?
最佳答案
你应该改用这个委托(delegate)方法:
- (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;
}
关于ios - "[NSBigMutableString substringWithRange:]: Range {0, 10} out of bounds; string length 9"撤消错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845277/
当我尝试在 UISearchBar 上执行撤消操作时,我的应用程序崩溃了。在我的应用程序中,我有代码来防止在搜索栏上输入“%”符号,为此它在 textDidChange 方法中将 % 替换为 @"",
NSString *htmlString = [NSString stringWithFormat:@" body { font-family: Mehr Nastaliq Web;
我是一名优秀的程序员,十分优秀!