6 uitableview uisearchbar uistoryboard
我想在storyboard xcode中为我的表创建searchBar,Everythings适合我,我没有任何错误,只是搜索不起作用.
我看到了这两个教程,但仍然无效.我无法搜索.我的教程:
-http://stackoverflow.com/questions/9897171/uisearchbar-implemented-with-storyboards
-http://www.youtube.com/watch?v=IqDZHgI_s24
Run Code Online (Sandbox Code Playgroud)
你能帮帮我吗,先谢谢你!
这是我的代码
CreateViewController.h
#import <UIKit/UIKit.h>
@interface CreateViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate>
{
// @property (weak, nonatomic) IBOutlet UISearchBar *searchBar;
NSArray *datas;
NSMutableArray *displayItems;
IBOutlet UITableView * tableView;
IBOutlet UISearchBar * searchbar;
}
@end
Run Code Online (Sandbox Code Playgroud)
CreateViewController.m
#import "CreateViewController.h"
@interface CreateViewController ()
@end
@implementation CreateViewController
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
datas = [NSMutableArray arrayWithObjects:@"Johan", @"Paul",@"George",@"Ringo", nil];
displayItems = [[NSMutableArray alloc] initWithArray:datas];
[super viewDidLoad];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [datas count];
}
- (UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";//This is the identifier in storyboard
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
}
cell.textLabel.text = [datas objectAtIndex:indexPath.row];
return cell;
}
-(void)searchbar:(UISearchBar *)searchbar textDidChange:(NSString *)searchText{
if([searchText length] == 0){
[displayItems removeAllObjects];
[displayItems addObjectsFromArray:datas];
}else{
[displayItems removeAllObjects];
for(NSString * string in datas){
NSRange r = [string rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (r.location != NSNotFound){
[displayItems addObject:string];
}
}
}
[tableView reloadData];
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
/*
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
*/
}
@end
Run Code Online (Sandbox Code Playgroud)
使用本教程iOS快速提示:使用搜索栏过滤UITableView
http://code-ninja.org/blog/2012/01/08/ios-quick-tip-filtering-a-uitableview-with-a-search-bar/
-(void)searchBar:(UISearchBar*)searchBar textDidChange:(NSString*)text
{
if(text.length == 0)
{
isFiltered = FALSE;
}
else
{
isFiltered = true;
filteredTableData = [[NSMutableArray alloc] init];
for (Food* food in allTableData)
{
NSRange nameRange = [food.name rangeOfString:text options:NSCaseInsensitiveSearch];
NSRange descriptionRange = [food.description rangeOfString:text options:NSCaseInsensitiveSearch];
if(nameRange.location != NSNotFound || descriptionRange.location != NSNotFound)
{
[filteredTableData addObject:food];
}
}
}
[self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)
像这样做,
在你的头文件中声明这样的数组,
NSMutableArray *datas;
NSMutableArray *displayItems;
Run Code Online (Sandbox Code Playgroud)然后像这样改变viewDidLoad中的数组初始化,
datas = [[NSMutableArray alloc] initWithObjects:@"Johan", @"Paul",@"George",@"Ringo", nil];
displayItems = [[NSMutableArray alloc] initWithArray:datas];
Run Code Online (Sandbox Code Playgroud)更改cellForRowAt方法中的数组,
cell.textLabel.text = [displayItems objectAtIndex:indexPath.row];
Run Code Online (Sandbox Code Playgroud)然后使用 NSLog 在textDidChange方法中打印您的搜索字符串。如果没有打印,则 IBOutlet 连接有问题。如果打印出来,请替换此方法并查看是否有效,
-(void)searchbar:(UISearchBar *)searchbar textDidChange:(NSString *)searchText{
if([searchText length] == 0){
}else{
[displayItems removeAllObjects];
for (int i=0; i<[datas count]; i++) {
if ([searchText hasPrefix:[datas objectAtIndex:i]]) {
[displayItems addObject:[datas objectAtIndex:i]];
} else {
}
}
}
[tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)我的排序方法不是世界上最好的。但请尝试让您的代码正常工作。
编辑:我认为你的代表不会解雇。尝试这个方法而不是上面的方法。
- (void) searchBarSearchButtonClicked:(UISearchBar*) theSearchBar
{
if([searchBar.text length] == 0){
arrayDisplayData = arrayOriginalData;
}else{
[arrayDisplayData removeAllObjects];
for(NSString * string in arrayOriginalData){
NSRange r = [string rangeOfString:searchBar.text options:NSCaseInsensitiveSearch];
if (r.location != NSNotFound){
[arrayDisplayData addObject:string];
}
}
}
[tblResults reloadData];
}
Run Code Online (Sandbox Code Playgroud)
或这个,
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11437 次 |
| 最近记录: |