如何在iphone的表格视图中搜索

时间:2011-08-03 11:04:43

标签: iphone objective-c

嗨朋友我在这里遇到一些问题请我在搜索栏中查看表格视图中的搜索字符串我创建了搜索栏的所有功能然后我在viewdidload方法中调用但是它没有工作原因

我正在创建NSMutableArray *tabledata;           我在tabledata中传递app.journeylist的所有值,但它没有wotking,应用程序将崩溃这是我的控制器类

//
//  TJourneylistController.m
//  Journey
//
//  Created by rocky on 3/17/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "TJourneylistController.h"
#import "TAddNewJourney.h"
#import "TJourneyListCell.h"
#import "JourneyAppDelegate.h"
#import "TJourneyTabBar.h"
#import "global.h"
#import "TPastJourneyTabBar.h"
#import "NewJourney.h"
#import "TStartnewjourney.h"
#import "TMapViewController.h"
#import "TShareController.h"
#import "TSpeedometerController.h"
#import "TReviewsController.h"
#define DATABASE_NAME @"journey"
@implementation TJourneylistController
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.leftBarButtonItem = self.editButtonItem;
    //self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(add_clicked:)];
    app = (JourneyAppDelegate *)[[UIApplication sharedApplication]delegate];
    sBar =[[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 30)]; 
    sBar.delegate=self;   
    [self.view addSubview:sBar];
    searcheddata =[[NSMutableArray alloc]init];
    tabledata =[[NSMutableArray alloc]init];     
    [tabledata addObject:app.journeyList];
    app.journeyList=[[NSMutableArray alloc]init]; 
    for(char c = 'A';c<='Z';c++)
        [app.journeyList addObject:[NSString stringWithFormat:@"%cTestString",c]];  //list = [app.journeyList retain];

}

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


#pragma mark -
#pragma mark Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 2;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [tabledata count];


}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *CellIdentifier = @"Cell";


    TJourneyListCell *cell =(TJourneyListCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[TJourneyListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        NSLog(@"%@",cell);
    }
    NewJourney *newjoruneobject = [app.journeyList objectAtIndex:indexPath.row];
    switch (indexPath.section) {
        case 0:

            cell.namelbl.text = newjoruneobject.journeyname;
            cell.distancelbl.text = newjoruneobject.journeylocation;
            cell.infolbl.text     = newjoruneobject.journeydescription;
            cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
            break;
            case 1:
            cell.namelbl.text = @"Hello";

                break;

        default:
            break;
    }

    return cell;


}
#pragma mark UISearchBarDelegate 
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{ 
    // only show the status bar’s cancel button while in edit mode 
    sBar.showsCancelButton = YES; 
    sBar.autocorrectionType = UITextAutocorrectionTypeNo; 
    // flush the previous search content 
    [tabledata removeAllObjects]; 
} 
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar 
{ 
    sBar.showsCancelButton = NO; 
}


- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [tabledata removeAllObjects];// remove all data that belongs to previous search 
    if([searchText isEqualToString:@""]|| searchText==nil){ 
        [myTableView reloadData]; 
        return; 
    } 
    NSInteger counter = 0; 
    for(NSString *name in app.journeyList) 
    { 
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
        NSRange r = [name rangeOfString:searchText]; 
        if(r.location != NSNotFound) 
        { 
            if(r.location== 0)//that is we are checking only the start of the names. 
            { 
                [tabledata addObject:name];
            } 
        } 
        counter++; 
        [pool release]; 
    } 
    [myTableView reloadData];
}




- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 
{ // if a valid search was entered but the user wanted to cancel, bring back the main list content 
    [tabledata removeAllObjects]; 
    [tabledata addObjectsFromArray:app.journeyList];
    @try
    { 
        [myTableView reloadData];
    }
    @catch(NSException *e)
    { 
    } 
    [sBar resignFirstResponder];
    sBar.text = @""; 
} 

// called when Search (in our case “Done”) button pressed 
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar 
{ 
    [searchBar resignFirstResponder]; 
}



#pragma mark -
#pragma mark Table view delegate



- (void)dealloc {
    [super dealloc];
    //[self.tableView release];
    [mLable1 release];
    //[mLable2 release];
    //[mLable3 release];
    //[mLable4 release];
}


@end

1 个答案:

答案 0 :(得分:2)

将此代码写入.h文件:

UISearchBarDelegate,UITableViewDelegate,UITableViewDataSource

IBOutlet UISearchBar *sbArray;
IBOutlet UITableView *tvData;

将此代码写入.m文件:

- (void)viewDidLoad
{
    journeyList = [[NSMutableArray alloc] init];
    FinalList = [[NSMutableArray alloc] init];

    for(char c = 'A';c<='Z';c++)
        [journeyList addObject:[NSString stringWithFormat:@"%cTestString",c]];

    for(char c = 'A';c<='Z';c++)
        [FinalList addObject:[NSString stringWithFormat:@"%cTestString",c]];

    [tvData reloadData];
    [super viewDidLoad];
}

 (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [FinalList count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"anyCell"];

    if(cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"anyCell"] autorelease];
    }

    cell.textLabel.text = [FinalList objectAtIndex:indexPath.row];

    return cell;
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)search
{
    [search resignFirstResponder];
}

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 
{
    [searchBar resignFirstResponder];
}

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    FinalList = [[NSMutableArray alloc] init];

    if([sbArray.text isEqualToString:@""]|| searchText == nil)
    { 
        [tvData reloadData]; 
        return; 
    } 
    NSInteger counter = 0; 
    for(NSString *name in journeyList) 
    { 
        NSRange r = [name rangeOfString:sbArray.text]; 
        if(r.location != NSNotFound) 
        { 
            if(r.location== 0)//that is we are checking only the start of the names. 
            { 
                [FinalList addObject:name];
            } 
        } 
        counter++; 
    } 
    NSLog(@"Counter :- '%d'",[FinalList count]);

    [tvData reloadData];
}