tableView中的搜索栏带有4个标签

时间:2014-10-08 13:29:33

标签: uitableview

我在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];
    }

}

当我进行搜索时,没有显示任何内容! 知道错误吗? 谢谢

1 个答案:

答案 0 :(得分:1)

我发现了问题! 我没有理解NSPredicte的作用...... 我用我的数据中的某些东西改变了SELF,它有效...... 所以,如果我的搜索基于我的应用程序中de message的发件人名称,我只需要通过NAME更改SELF。 不管怎样,谢谢