2014-10-08 35 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。 無論如何感謝