0

こんにちはみんな私は検索バーを実装するために次のコードを書きました、そしてうまく働いています

    - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
 return YES;
}// return NO to not become first responder

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
 isSearchOn=YES;
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
 searchBar.text=@"";
 isSearchOn=NO;
 [searchBar resignFirstResponder];
}

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
 if ([searchText length]>0) 
  isSearchOn=YES;
 else
  isSearchOn=NO;

 NSLog(@"search text %@",searchText);
 [self searchText:searchText];
 [table reloadData];
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
 isSearchOn=NO;
 [searchBar resignFirstResponder];
}


-(void)searchText:(NSString*)str
{
 NSLog(@"search text");
 [resultArray removeAllObjects];


 if (segmentControl.selectedSegmentIndex==0) {
  for (NSDictionary *CellDix in FriendSuggestion) 
  {
   NSRange titleResultRange =  [[CellDix valueForKey:@"itemid.item"] rangeOfString:str options: (NSCaseInsensitiveSearch | NSLiteralSearch)];

   NSRange titleRangePopular=[[CellDix valueForKey:@"usagecategoryid.usagecategory"] rangeOfString:str options:(NSCaseInsensitiveSearch | NSLiteralSearch)];

   if (titleResultRange.length > 0 || titleRangePopular.length>0)
    [resultArray addObject:CellDix];
  }
 }else
 {
  for (NSDictionary *CellDix in popularSuggestion) 
  {
   NSRange titleResultRange =  [[CellDix valueForKey:@"itemid.item"] rangeOfString:str options: (NSCaseInsensitiveSearch | NSLiteralSearch)];

   NSRange titleRangePopular=[[CellDix valueForKey:@"usagecategoryid.usagecategory"] rangeOfString:str options:(NSCaseInsensitiveSearch | NSLiteralSearch)];

   if (titleResultRange.length > 0 || titleRangePopular.length>0)
    [resultArray addObject:CellDix];
  }
 }


 NSLog(@"cellDics  array  %@",resultArray);
}

しかし、検索バーでテキストを検索してから検索をクリックし、その後検索バーのテキストの右側にあるクロスボタンをクリックすると、アプリがクラッシュするという問題が発生します。この問題を解決する方法を知っている人は誰でもいます。ありがとうございました..

4

2 に答える 2

0
Add one more delegate method.

    - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
    {
     searchBar.text=@"";
    }

it is not genuine but from this your problem will be solved.
于 2012-05-31T15:20:06.250 に答える
0

「textDidChange:」メソッドで検索バーがファーストレスポンダーであるかどうかを確認する必要があります。

Objective C

 -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
    if ([searchText isFirstResponder]) {
      // do whatever you need to do
    }
}

迅速

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
        if searchBar.isFirstResponder() {
          // do whatever you need to do
        }
}
于 2015-06-05T14:48:08.870 に答える