title: How to implement UITableView search functionality
body: <p>My iPhone application has a UITable View implemented with search functionality in it. The values in the table are grouped into sections from A-Z. Whenever a user tap on particular cell in the table it loads a detail view controller which gives all the values of that particular user. Now my problem is whenever I search some contact and tap on a particular user to check his detail view it always returns a contact starting with letter A. So, my doubt is how to implement this search functionality. Is there a way to get the name of the contact I tapped..Please check this screenshot.. For example if I search some contact starting with letter 'B' and tap on that contact it loads the detail view of a contact starting with letter 'A'. I get all the values from the database. Can you please help me out...
  <img src="https://i.imgur.com/vdXM8.png" alt="alt text"></p>
  
  <p>This is the code:</p>
  
  <p>The code I wrote here is in a method: </p>
  
  <p>I am getting all the contacts from database and assigning to an array contacts. Then I am grouping all the contacts according to the alphabets and grouping everything into a dictionary with keys as A-Z and values as name of contacts starting with these letters. Now when I search for a particular contact his name may start with either A ,B or Z..so in the search bar when I search for a particular contact for example a contact starting with letter Z, in this case it gives the details of a person with A. I want this to change so that whenever I tap on a particular contact it should load its details. I am unable to figure out how to do it..</p>
  
  <pre><code>    contacts = [[db getContacts:@"Contacts"] componentsSeparatedByString:@","];
      [db cleanup];
  
      NSMutableArray *tempArray = [[NSMutableArray alloc] init];
      NSString *charString;
      for (int i=65; i&lt;91; i++) {
          charString = [NSString stringWithFormat:@"%c",(char *)i];
          [tempArray addObject:charString];
      }
      [charString release];
  
      NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  
  
      for (int i=0; i&lt;[tempArray count]; i++) {
          NSMutableArray *contactsByIndex = [[[NSMutableArray alloc] init]autorelease];
          NSString *tempChar = [tempArray objectAtIndex:i];
  
          for (int j=0; j&lt;[contacts count]-1; j++)
          {
  
              NSString *test = [contacts objectAtIndex:j];
              NSString *tempString = [test substringToIndex:1];
  
              if ([tempString isEqualToString:tempChar]) {
                  [contactsByIndex addObject:[contacts objectAtIndex:j]];
              }
  
  
          }
          [dict setObject:contactsByIndex forKey:[tempArray objectAtIndex:i]];
      }
          self.contactNames = dict;
  
      NSArray *array = [[contactNames allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
  
      self.contactKeys = array;
  
      [dict release];
      [tempArray release];
  
      //---display the searchbar--- 
      self.tableView.tableHeaderView = searchBar; 
      searchBar.autocorrectionType = UITextAutocorrectionTypeYes;
  
      listOfContacts = [[NSMutableArray alloc] init]; 
      for (NSString *key in array)  
      {
  
          NSArray *contactsArray = [contactNames objectForKey:key]; 
          for (NSString *name in contactsArray) {
              [listOfContacts addObject:name];
          }
      }
  
  
     - (void) searchContactsTableView {
  
      //---clears the search result--- 
      [searchResult removeAllObjects];
      for (NSString *str in listOfContacts) {
          NSRange titleResultsRange = [str rangeOfString:searchBar.text options:NSCaseInsensitiveSearch];
          if (titleResultsRange.length &gt; 0) 
              [searchResult addObject:str];
  
      }
  
  }
  
  
  
  - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
      // Navigation logic may go here. Create and push another view controller.
      NSString *selectedRow=nil;
      if (isSearchOn) {
          selectedRow=[searchResult objectAtIndex:indexPath.row];
      }
  
      DetailViewController *detailViewController;
      int section_index=[indexPath indexAtPosition:[indexPath length]-2];
      int sugarid_Index = [indexPath indexAtPosition: [indexPath length]-1];
      NSString* sectionName=[contactKeys objectAtIndex:section_index];
      NSLog(@"%@",sectionName);
  
  //This is a method which gets the details of a particular contact based on the section and the row selected..Contacts is the table name
  
      NSString *getContact=[db getId:@"Contacts" bySection:sectionName andIndex:sugarid_Index];
      id=[db getContact:@"Contacts" id:getContact];
      // Pass the selected object to the new view controller.
      detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
      detailViewController.eachContact=contactForSugarId;
      [self.navigationController pushViewController:detailViewController animated:YES];
  
  }
  </code></pre>
  
  <p>When I search for a contact it should search for the name in database and should return its details. Is there a way to do it..please let me know or is there a way to get the name of the cell i.e. the contact name so that I can use that in one of my database methods to retrieve the details of the contact I selected.</p>