1

我正在研究一种情况,当用户在搜索栏上键入“$”作为第一个字符时,系统应在其后添加另一个 $,例如:用户键入“$”并且系统添加“$”因此搜索栏上的文本应该看起来像'$$'。

我正在实施它,如下所示:

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ([text hasPrefix:@"$"])
    {
          text = [text stringByAppendingString:@"$"];
          self.searchBar.text = text;
    }

    return YES;
}

问题:替换文本实际上是如何工作的?我的理解是,当用户键入'$'时,上述方法中的文本参数具有'$'作为值,并且在方法执行后应该用'$$'替换?但在执行此方法后,我得到 '$$$' 作为搜索栏上的最终字符串。但是,如果我返回 NO,对于此方法,我会在搜索栏上看到“$$”,但它会阻止我在搜索栏上输入任何其他内容。

我在这里错过了什么吗?我试图了解这种方法实际上是如何工作的。

4

1 回答 1

0

我还没有尝试过您正在做什么,但是从该方法的文档中听起来您应该进行一些更改。首先,您需要确保文本中只有一个 $,否则每次在文本字段中键入 $ 时,它都会添加一个额外的 $。其次,您是否尝试在text遇到这种情况时将参数更改为 @"$$",而不是在searchBar.text属性上设置值?在我看来,由于您从该方法返回 YES,因此您是在告诉搜索栏继续更改其文本,但您也在更改其背后的文本(通过直接设置)。

于 2013-10-16T00:40:20.597 回答