Как перезагрузить UITableView после завершения редактирования UISearchBar - PullRequest
2 голосов
/ 08 августа 2011

Я создал UISearchBar.Это работает, но не так, как я хочу.Если я введу любую первую букву на панели поиска UIS, а затем нажму кнопку SearchButton, она не будет работать, но когда я нажимаю следующий контроллер и возвращаюсь, я вижу результаты поиска в TableView.Первый раз мой TableView не обновляется.

Вот мой пользовательский класс ячеек и мой класс контроллера

@synthesize myTableView;
@synthesize tabledata;

#pragma mark -
#pragma mark Initialization
#pragma mark -
#pragma mark View lifecycle

-(void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.leftBarButtonItem = self.editButtonItem;
    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];
    NSLog(@"*************:%&",list);
    list=[[NSMutableArray alloc]init]; 
    tabledata =[[NSMutableArray alloc]init]; 
    list = [app.journeyList retain];
    [tabledata addObjectsFromArray:list];
}

-(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 1;
}

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

    return [tabledata count];
}

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

{ 
    NSLog(@"*************:%&",list);
    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 = [tabledata objectAtIndex:indexPath.row]; 
    cell.namelbl.text = newjoruneobject.journeyname;  
    cell.distancelbl.text = newjoruneobject.journeylocation;  
    cell.infolbl.text = newjoruneobject.journeydescription;   
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
    return cell; 
}

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

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar 
{ 
    searchBar.showsCancelButton = NO; 
}

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{
    [tabledata removeAllObjects];// remove all data that belongs to previous search

    if([sBar.text length] != 0)//|| searchText==nil) 
    { 
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"journeyname contains[cd] %@", searchBar.text];
        [tabledata addObjectsFromArray:[list filteredArrayUsingPredicate: predicate]];
        [myTableView reloadData];
        return;
         }
    NSLog(@"Counter:-'%d'",[tabledata count]);
    [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:list];
    @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]; 
    myTableView.allowsSelection = YES;
    myTableView.scrollEnabled = YES;
    [myTableView reloadData];
}

- (void)dealloc {
    [super dealloc];
    [mLable1 release];
    [myTableView release], myTableView = nil;
    [tabledata dealloc];
}

@end      

Ответы [ 4 ]

3 голосов
/ 13 июля 2012
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar 
{ 
    searchBar.showsCancelButton = NO; 
    [myTableView reloadData];
}

У меня тоже были проблемы с этим, пока я не попал на этот пост. Я просмотрел ваши функции и решил добавить данные для перезагрузки в функцию выше, теперь она работает нормально! Надеюсь, это поможет!

0 голосов
/ 01 июля 2016

Swift версия

func searchBarTextDidEndEditing(searchBar: UISearchBar) {
    searchActive = false //Local variable used to manipulate your cells
    self.newsTableView.reloadData()
}
0 голосов
/ 12 марта 2013

Этот метод делегата можно использовать для перезагрузки таблицы после исчезновения таблицы поиска:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
0 голосов
/ 08 августа 2011
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [tableView reloadData];
}
...