2012-10-30 143 views
1

我用取消按钮创建了一个UISearchbar,但是当我单击取消按钮时,它不显示数组,它只是关闭键盘。UISearchbar上的取消按钮

allItemsNSArraydisplayItemsNSMutableArray

-(void)searchBarSearchButtonClicked:(UISearchBar *)asearchBar{ 
[displayItems addObject:allItems]; 
[searchBar resignFirstResponder]; 
} 


-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ 

if ([searchText length] == 0) { 
    [displayItems removeAllObjects]; 
    [displayItems addObjectsFromArray:allItems]; 

} else { 

    [displayItems removeAllObjects]; 
    for (NSString * string in allItems){ 
     NSRange r =[string rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

     if (r.location != NSNotFound){ 
      [displayItems addObject:string]; 
     } 
    } 

    [tableView reloadData]; 

} 

} 


     - (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath{ 
return UITableViewCellAccessoryDisclosureIndicator; 
} 

-(void)searchBarCancelButtonClicked:(UISearchBar *)asearchBar{ 
[displayItems removeAllObjects]; 
[displayItems addObjectsFromArray:allItems]; 
[searchBar resignFirstResponder]; 
} 
-(void)searchBarSearchButtonClicked:(UISearchBar *)asearchBar{ 
[searchBar resignFirstResponder]; 
} 
+0

请分享更多的细节 –

+0

我编辑的代码在主题 – ffds

+0

点击取消按钮时将触发哪个方法? –

回答

1

你真的应该使用两个数组这一点。一个NSArray称为像originalData,另一个称为filteredData的NSMutableArray。这些在开始和过滤时都是相同的,您将从originalData数组中构建/重建filteredData数组。下面是一个粗略的例子:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ 

    if ([searchText length]) { 
     [displayItems removeAllObjects]; 
     for (NSString * string in allItems){ 
      NSRange r =[string rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

      if (r.location != NSNotFound){ 
       [displayItems addObject:string]; 
      } 

     [tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]; 
     } 
    } 
} 



-(void)searchBarCancelButtonClicked:(UISearchBar *)asearchBar{ 
    [searchBar resignFirstResponder]; 
    self.displayItems = [[NSMutableArray alloc] initWithArray:allItems]; 
    [tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]; 
} 

我还添加了一个委托方法为ScrollViewTableView),以便开始滚动时,键盘被驳回:

#pragma mark - ScrollView (UITableView) delegate methods 
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { 
    [mySearchBar resignFirstResponder]; 
} 
+0

感谢人们如何在点击搜索字段时将这个黑色阴影作为联系人应用。 – ffds

相关问题