2014-10-08 54 views
0

我有TableViewController带有命名的类:messageTableViewController AND定制TableViewcell在tableViewController上,但它自己的类名为:messageTableViewCell。 (在同一个故事板中) messageTableViewCell包含名为nom,titre,resume和date的4个标签。带有4个标签的tableView中的搜索栏

我想在messageTableViewController中实现一个搜索栏。为此,将一个SearchBarandSearchDisplayController拖放到messageTableViewController的顶部。和我的代码是:

在.H

@property (nonatomic, copy) NSArray *unreadmessagesArray; 
@property (nonatomic, strong) IBOutlet UISearchBar *searchBar; 
@property(nonatomic, strong) NSMutableArray *results; 

在.M

- (NSMutableArray *)results 
{ 
    if (!_results) { 
     _results = [[NSMutableArray alloc] init]; 
    } 

    return _results; 
} 


- (void)searchThroughData 
{ 
    self.results = nil; 

    NSPredicate *resultsPredicate = [NSPredicate predicateWithFormat:@"SELF contains [search] %@", self.searchBar.text]; 
    self.results = [[self.unreadmessagesArray filteredArrayUsingPredicate:resultsPredicate] mutableCopy]; 
} 

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [self searchThroughData]; 

} 

#pragma mark - Table view data source 

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


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (tableView == self.tableView) { 
     if(self.unreadmessagesArray == nil) 
      return 0; 

     return [self.unreadmessagesArray count]; 
    } else { 
     [self searchThroughData]; 
     return self.results.count; 
    } 

} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

// Configure Cell 

messageTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellidentifier forIndexPath:indexPath]; 

if (!cell) { 
    cell = [[messageTableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellidentifier]; 
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
} 

if (tableView == self.searchDisplayController.searchResultsTableView) { 

    NSDictionary *reloadedMessage = [self.results objectAtIndex:indexPath.row]; 

    cell.nom.text = [reloadedMessage valueForKey:@"sentBy"]; 
    cell.titre.text = [reloadedMessage valueForKey:@"messageThreadTitle"]; 
    cell.resume.text = [reloadedMessage valueForKey:@"messageBody"]; 
    cell.date.text = [reloadedMessage valueForKey:@"sentOn"]; 
} else { 


    NSDictionary *currentMessage = [self.unreadmessagesArray objectAtIndex:indexPath.row]; 

    cell.nom.text = [currentMessage valueForKey:@"sentBy"]; 
    cell.titre.text = [currentMessage valueForKey:@"messageThreadTitle"]; 
    cell.resume.text = [currentMessage valueForKey:@"messageBody"]; 
    cell.date.text = [currentMessage valueForKey:@"sentOn"]; 

    } 
return cell; 

} 


- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 
    return NO; 
} 

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { 
    return NO; 
} 



-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (self.searchDisplayController.isActive) { 
     [self performSegueWithIdentifier:@"detailMessage" sender:self]; 
    } 

} 

当我做了搜索,没有什么是显示! 任何错误的想法? 谢谢

+0

它显示您的数据只是没有搜索?或者从不显示数据?因为我没有看到任何cellIdentifier,所以这就是为什么我问。 – Mayo323 2014-10-08 15:17:14

+0

我发现了这个错误,谢谢 – lyn87 2014-10-08 17:13:27

+0

我在程序中将上面的cellidentifier标识为静态字符串,但没有显示出来。谢谢 – lyn87 2014-10-08 20:50:16

回答

1

我发现了这个问题! 我没有理解NSPredicte的功能... 我改变了SELF的东西在我的数据,它的工作原理... 因此,如果我基于我的应用程序的消息发件人的名称搜索,我只是必须由NAME更改SELF。 无论如何感谢