我正在使用 iOS7 我有一个搜索栏。我正在使用 textDidChange 方法来获取每个字符并处理我的代码,当我们有文本时,我有明确的“X 按钮”。在以前的版本中,当单击清除按钮时textDidChange方法被调用一次,我们曾经在那里处理代码。
但是在 iOS7 中,单击清除按钮时会调用此方法两次,这种行为我也可以在示例代码中看到
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
我正在使用 iOS7 我有一个搜索栏。我正在使用 textDidChange 方法来获取每个字符并处理我的代码,当我们有文本时,我有明确的“X 按钮”。在以前的版本中,当单击清除按钮时textDidChange方法被调用一次,我们曾经在那里处理代码。
但是在 iOS7 中,单击清除按钮时会调用此方法两次,这种行为我也可以在示例代码中看到
我自己试过了,确实如此,该方法被调用了两次,参数完全相同。阅读文档并没有说明任何内容,因此它可能只是一个错误。
你能忽略它吗?
您可以创建私有属性:
@property (strong, nonatomic) NSString *searchedText;
并用它来检查是否相等:
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)newText{
if(![self.searchedText isEqualToString:newText]){
self.searchedText = [[NSString alloc] initWithString:newText];
//Do your magic
}
}
我有同样的问题,我通过创建一个 ivar 解决了它......这对我有用,因为我在调用它后重新加载了我的表,并textDidClear = NO;在我的 reloadTable 方法中重置。
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if (([searchText isEqualToString:@""]) && (textDidClear == NO))
{
textDidClear = YES;
[_categoryManager loadCategoriesWithToken:nil];
} else if (textDidClear == NO) {
textDidClear = NO;
[_productManager loadProductsFromSearch:searchText tokenIdent:nil];
}
}
当您在模拟器中工作并在搜索栏中使用计算机键盘键入时,有时会调用两次该方法
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)newText.
为避免此问题,您必须使用模拟器键盘。看起来这是一个模拟器错误。