我在tableViewController上有TableViewController
命名类:messageTableViewController
和自定义TableViewcell
但是它自己的类名为messageTableViewCell
。 (在同一个故事板中)
messageTableViewCell
包含4个标签:nom,titre,resume和date。
我想在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 :(得分:1)
我发现了问题! 我没有理解NSPredicte的作用...... 我用我的数据中的某些东西改变了SELF,它有效...... 所以,如果我的搜索基于我的应用程序中de message的发件人名称,我只需要通过NAME更改SELF。 不管怎样,谢谢