2013-10-16 36 views
1

我正在处理的情况下,当用户键入一个'$'作为搜索栏上的第一个字符系统应该添加另一个$后,例如:用户类型'$'和系统添加'$',所以搜索栏上的文字应该看起来像'$$'。工作流或查询shouldChangeTextInRange UISearchBar方法

我如下实现它:

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

    return YES; 
} 

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

我在这里错过了什么吗?我想了解这种方法是如何工作的。

回答

0

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