0

テーブルビューで検索バーと検索テキストを実装しました。私が得ている問題は、テーブルビューをスクロールしてから突然検索バーをクリックすると、アプリが終了することです。

検索バーをクリックしたときにスクロールを停止する方法を考えてみてください。

私のコードは次のとおりです。

    - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
 NSLog(@"becomes first responder");
 [table setScrollEnabled:NO];
 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];
 [table setScrollEnabled:YES];
}

- (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)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
 NSLog(@"end editing called.....");
 searchBar.text=@"";
 [table setScrollEnabled:YES];
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
 [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];
  }
 }
4

1 に答える 1

0

検索バーをクリックすると、isSearch bool変数がオンになり、UがcellforRowAtIndexpathに条件を適用すると、isSearchが呼び出されてチェックされ、それに応じて機能し、Uが検索バーに何も書き込んでいないため、結果の配列は空になります。チェックされ、valuesを使用してresultArrayをロードします。セル値を埋めるためにcellforRowAtIndexpathにnull配列が見つかったため、アプリを終了するのはそのためです。より良い方法は、searchBarTextDidBeginEditingデリゲートメソッドではなく、searchbarのtextDidChangeでisSearchを実行する必要があることです。したがって、このメソッドにコメントします。

  - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
    {
     isSearchOn=YES;
    }
于 2012-06-01T11:05:06.300 に答える