我正在开发一个场景,当用户在搜索栏上输入'$'作为第一个字符时,系统应在其后添加另一个$,例如:用户输入'$',系统会添加'$',因此文本在搜索栏上应该看起来像'$$'。
我正在实施如下:
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([text hasPrefix:@"$"])
{
text = [text stringByAppendingString:@"$"];
self.searchBar.text = text;
}
return YES;
}
问题:替换文字实际上如何运作?我的理解是,当用户键入'$'时,上面方法中的text参数的值为'$',并且在执行该方法后应该替换为'$$'?但在执行此方法后,我将“$$$”作为搜索栏上的最终字符串。但是,如果我返回NO,对于这种方法,我会在搜索栏上显示'$$'但是它会阻止我在搜索栏上输入任何其他内容。
我在这里遗漏了什么?我试图了解这种方法实际上是如何工作的。
答案 0 :(得分:0)
我还没有尝试过你正在做的事情,但是从documentation那个方法看起来你应该做一些改变。首先,您需要确保文本中只有一个$,否则每次在文本字段中键入$时,它都会添加一个$。其次,您是否尝试在遇到该情况时仅将text
参数更改为@“$$”,而不是在searchBar.text
属性上设置值?在我看来,既然你从这个方法返回YES,你就告诉搜索栏继续改变它的文本,但你也要改变它后面的文本(通过直接设置)。