iOS搜索栏问题

时间:2014-10-06 11:03:01

标签: objective-c uitableview uisearchbar uisearchdisplaycontroller

我正在搜索表格视图数据。 Tableview包含联系人列表,当我提供联系人姓名时,它无法提供搜索栏结果。这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Hide the search bar until user scrolls up
   CGRect newBounds = [[self tableview] bounds];
        newBounds.origin.y = newBounds.origin.y + search.bounds.size.height;
   [[self tableview] setBounds:newBounds];
  UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]     

  initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(goToSearch)];
  self.navigationItem.rightBarButtonItem=doneButton;
  self.filtereditems=[NSMutableArray arrayWithCapacity:[array count]];
  [self loadPhoneContacts];
  [[self tableview] reloadData];
}

- (void)goToSearch
{ 
   [search becomeFirstResponder];
}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller       
       shouldReloadTableForSearchString:(NSString *)searchString
{
   // Tells the table data source to reload when text changes
   [self filterContentForSearchText:searchString scope:
   [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:    
   [self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

   // Return YES to cause the search result table view to be reloaded.
   return YES;
}


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller        
   shouldReloadTableForSearchScope:(NSInteger)searchOption
{
    // Tells the table data source to reload when scope bar selection changes
    [self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope:
    [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]];

    // Return YES to cause the search result table view to be reloaded.
   return YES;
}



-(void)loadPhoneContacts{

   ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();

   if (status == kABAuthorizationStatusDenied) {

   [[[UIAlertView alloc] initWithTitle:nil message:@"This app requires access to your contacts to function properly. Please visit to the \"Privacy\" section in the iPhone 
  Settings app." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
    return;
}

CFErrorRef error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);

if (error) {
    NSLog(@"ABAddressBookCreateWithOptions error: %@", CFBridgingRelease(error));
    if (addressBook) CFRelease(addressBook);
    return;
}

if (status == kABAuthorizationStatusNotDetermined) 
{
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
        if (error) {
            NSLog(@"ABAddressBookRequestAccessWithCompletion error: %@", 
    CFBridgingRelease(error));
        }

        if (granted) {
            // if they gave you permission, then just carry on

            [self listPeopleInAddressBook:addressBook];
        } else {


            dispatch_async(dispatch_get_main_queue(), ^{

                [[[UIAlertView alloc] initWithTitle:nil message:@"This app requires access to    
   your contacts to function properly. Please visit to the \"Privacy\" section in the iPhone 
       Settings app." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
            });
        }

        if (addressBook) CFRelease(addressBook);
    });

} else if (status == kABAuthorizationStatusAuthorized) {
    [self listPeopleInAddressBook:addressBook];
    if (addressBook) CFRelease(addressBook);
}
    }

  - (void)listPeopleInAddressBook:(ABAddressBookRef)addressBook
  {
     NSInteger numberOfPeople = ABAddressBookGetPersonCount(addressBook);
     NSMutableArray * contactList=     
      CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBook));

       array =[[NSMutableArray alloc] init];

        for (int i = 0; i < numberOfPeople; i++)
         {
         ABRecordRef person = (__bridge ABRecordRef)contactList[i];
      firstName = CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty));
    lastName  = CFBridgingRelease(ABRecordCopyValue(person, kABPersonLastNameProperty));
          NSLog(@"Name:%@ %@", firstName, lastName);


     ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);

    CFIndex numberOfPhoneNumbers = ABMultiValueGetCount(phoneNumbers);
    for (CFIndex i = 0; i < numberOfPhoneNumbers; i++)
    {
        phoneNumber = CFBridgingRelease(ABMultiValueCopyValueAtIndex(phoneNumbers, i));
        NSLog(@"  phone is:%@", phoneNumber);
    }


        [array addObject:[NSDictionary dictionaryWithObjectsAndKeys:firstName , @"first_name"          
         ,    lastName , @"last_name" ,phoneNumber,@"phone_Number" ,nil]];
     NSArray *ar=[[NSArray alloc]init];


         NSLog(@"array is,%@",ar);
         CFRelease(phoneNumbers);

       }
     }

 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath  
     *)indexPath
 {
     return 50;
 }

 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     if (tableView == self.searchDisplayController.searchResultsTableView)
          return [filtereditems count];
     else
          return [array count]; 
 }

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 {
      return 1;
 }

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:   
     (NSIndexPath *)indexPath
 {
      NSLog(@"array is %@",array);
     static NSString *CustomCellID = @"cell";
     contactcellTableViewCell *cell = [tableView  dequeueReusableCellWithIdentifier:CustomCellID];
 if (cell == nil)
  {
    cell=[[contactcellTableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle  
   reuseIdentifier:CustomCellID];
    NSArray *nib=[[NSBundle mainBundle]loadNibNamed:@"contactcellTableViewCell" owner:self 
    options:nil];
    cell =[nib objectAtIndex:0];
  }

 if (tableView == self.searchDisplayController.searchResultsTableView) {
      cell.Firstnamelbl.text = [filtereditems objectAtIndex:indexPath.row];
     cell.Lastnamelbl.text = [filtereditems objectAtIndex:indexPath.row];
 } else {
     cell.Firstnamelbl.text = [[array 
   objectAtIndex:indexPath.row]objectForKey:@"first_name"];
     cell.Lastnamelbl.text = [[array objectAtIndex:indexPath.row]objectForKey:@"last_name"];
}
 return cell;

}



 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath  
       *)indexPath
 {
   [array removeAllObjects];
   contactcellTableViewCell *cell = (contactcellTableViewCell *) [tableView   
  cellForRowAtIndexPath:indexPath];

    static NSString *CustomCellID = @"cell";
 NSString *string=[firstName stringByAppendingString:lastName];


   if (cell == nil)
   {
    cell=[[contactcellTableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle 
      reuseIdentifier:CustomCellID];
    NSArray *nib=[[NSBundle mainBundle]loadNibNamed:@"contactcellTableViewCell" owner:self 
  options:nil];
    cell =[nib objectAtIndex:0];
}

if (cell.m_checkImageView.image == [UIImage imageNamed:@"Selected.png"])

{
    cell.m_checkImageView.image = [UIImage imageNamed:@"Unselected.png"];


}
else
{
    cell.m_checkImageView.image = [UIImage imageNamed:@"Selected.png"];

   NSLog(@"string is %@",string);
}
}
     - (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
   {



[self.filtereditems removeAllObjects];


   NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name contains[c]  
    %@",searchText];
   NSArray *tempArray = [array filteredArrayUsingPredicate:predicate];

   if(![scope isEqualToString:@"All"]) {
    // Further filter the array with the scope
    NSPredicate *scopePredicate = [NSPredicate predicateWithFormat:@"SELF.category   
      contains[c] %@",scope];
    tempArray = [tempArray filteredArrayUsingPredicate:scopePredicate];
 } 

  filtereditems = [NSMutableArray arrayWithArray:tempArray];
   }

这是我的代码,当我在搜索栏中搜索任何东西时,我无法找到搜索内容,搜索栏根本没有响应。请提前帮助谢谢

0 个答案:

没有答案