如何在UISearchBar结束编辑后重新加载UITableView

如何在UISearchBar结束编辑后重新加载UITableView

问题描述:

我创建了一个UISearchBar。它正在工作,但不是我想要的方式。如果我在UISearchbar上输入任何第一个字母,然后点击SearchButton,它不起作用,但是当我推入下一个控制器并返回时,我在TableView中看到了我的搜索结果。第一次我的TableView不刷新。如何在UISearchBar结束编辑后重新加载UITableView

这里是我的自定义单元格级和

@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  

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [tableView reloadData]; 
} 
+0

朋友它不工作我已与此 – Rocky

+0

它工作正常在我的应用程序完成。检查你的搜索显示代表。 – ChangUZ

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

我是有这个困难,以及直到我得到这个职位我的控制器类。我查看了你的函数,并决定将重载数据放在上面的函数中,现在它工作正常!希望这可以帮助!

您可以使用此委托方法重载表,之后搜索表中消失:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 

斯威夫特版本

func searchBarTextDidEndEditing(searchBar: UISearchBar) { 
    searchActive = false //Local variable used to manipulate your cells 
    self.newsTableView.reloadData() 
}