2014-01-23 3 views
0

Всякий раз, когда я искал что-то из строки поиска, я получаю правильные результаты. Когда я нажимаю на эти результаты, он связывает меня с тем же местом, с которым мои исходные результаты связывали бы меня. Другими словами, у меня есть учитель a-e, я печатаю «e» и получаю только результат «e», но когда я нажимаю на эту ячейку, он связывает меня с профилем учителя «a». Вот что я до сих пор.Панель поиска iOS не будет ссылаться на правильные результаты

#import <UIKit/UIKit.h> 

@interface ListTableViewController : UITableViewController 

@end 

--- 


#import "ListTableViewController.h" 
#import "DetailsViewController.h" 

@interface ListTableViewController() <UISearchDisplayDelegate> 

@property (strong, nonatomic) NSArray *className; 

@property (strong, nonatomic) NSArray *teacherName; 
@property (strong, nonatomic) NSArray *blockNumber; 
@property (strong, nonatomic) NSArray *myNew; 
@property (strong, nonatomic) NSArray *searchResults; 

@end 

@implementation ListTableViewController 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.className = [NSArray arrayWithObjects:@"Biology",@"English III",@"Chemistry",@"Algebra II",@"Morality", nil]; 
    self.teacherName = [NSArray arrayWithObjects:@"Teacher A",@"Teacher B",@"Teacher C",@"Teacher D",@"Teacher E", nil]; 
    self.blockNumber = [NSArray arrayWithObjects:@"B1",@"B3",@"B6",@"B2",@"B1", nil]; 



    NSMutableArray *combinedArray = [[NSMutableArray alloc]init]; 
    for (int i = 0; i < [self.className count]; i++) 
    { 
     NSString *combinedString = [NSString stringWithFormat:@"%@ | %@ | %@",[self.className objectAtIndex:i],[self.teacherName objectAtIndex:i],[self. blockNumber objectAtIndex:i]]; 
     [combinedArray addObject:combinedString]; 
    } 
    self.myNew = combinedArray; 
} 

- (void)filterContentForSearchText: (NSString *) searchText 
{ 
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", searchText]; 
    self.searchResults = [self.myNew filteredArrayUsingPredicate:resultPredicate]; 
} 

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 
{ 
    [self filterContentForSearchText:searchString]; 
    return YES; 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (tableView == self.tableView) { 
     return [self.myNew count]; 
    } else { // (tableView == self.searchDisplayController.searchResultsTableView) 
     return [self.searchResults count]; 
    } 

} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    if (tableView == self.tableView) { 
     cell.textLabel.text = [self.myNew objectAtIndex:indexPath.row]; 
    } else { 
     cell.textLabel.text = [self.searchResults objectAtIndex:indexPath.row]; 
    } 
    return cell; 
} 



#pragma mark - Table view delegate 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"showDetails"]) { 
     DetailsViewController *dvc = segue.destinationViewController; 

     NSIndexPath *indexPath = nil; 

     if ([self.searchDisplayController isActive]) { 
      indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow]; 

      dvc.sendLabel = [self.searchResults objectAtIndex:indexPath.row]; 
      dvc.teachersendLabel = [self.teacherName objectAtIndex:indexPath.row]; 
      return; 
     } else{ 
      indexPath = [self.tableView indexPathForSelectedRow]; 
      dvc.sendLabel = [self.myNew objectAtIndex:indexPath.row]; 
      dvc.teachersendLabel = [self.teacherName objectAtIndex:indexPath.row]; 
      return; 
     } 
    } 
} 

@end 

В моей DetailsViewController

#import <UIKit/UIKit.h> 

@interface DetailsViewController : UIViewController 

@property (weak, nonatomic) IBOutlet UILabel *label; 
@property (strong, nonatomic) NSString *sendLabel; 

@property (weak, nonatomic) IBOutlet UILabel *teacherlabel; 
@property (strong, nonatomic) NSString *teachersendLabel; 

@end 

--- 

@implementation DetailsViewController 
@synthesize label; 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.teacherlabel.text = [NSString stringWithFormat:@"%@", self.teachersendLabel]; 
    self.label.text = [NSString stringWithFormat:@"%@", self.sendLabel]; 

} 

@end 
+0

Установите точку останова на 'if ([self.searchDisplayController isActive])' line in '- (void) prepareForSegue: (UIStoryboardSegue *) отправитель отправителя: (id) отправитель и убедитесь, что вы попадаете в ожидаемый часть инструкции if/else. – Brian

+0

Примечание редактора: @Kevin, * мы никогда не изменяем код * при редактировании, только отступы и форматирование. – brasofilo

ответ

0

Глядя на ваш код не казалось бы там быть какие-либо проблемы. Есть только две вещи, которые я могу придумать:

1) Я не уверен, как вы показываете «главный» tableView и результаты поиска. Может быть, ваши штрихи на самом деле обрабатываются «основным» tableView? Это может произойти, если у вас есть две таблицы, выровненные друг над другом, а нижняя - все еще видна, и с userInteractionEnabled установлено значение YES, когда поиск «isActive». В этом случае иерархия вид должен выглядеть примерно так:

- UIView 
    - UITableView (main) 
    - UITableView (search) 

2) использование -[UITableView indexPathForSelectedRow] в prepareForSegue:sender:. Если вы используете Storyboard, отправитель является выбранной ячейкой. Вы можете проверить, что отправитель является фактической ячейкой или indexPath isKindOfClass. Если отправитель является indexPath, вы можете его использовать, если это ячейка, вы можете вызвать метод -[UITableView indexPathForCell:]. Используя этот подход, вы убедитесь, что ваш сеанс фактически запускается для правильного события (например, вы можете программно выбирать ячейку, но это не приведет к сбою, и позже вы можете позвонить по телефону -performSegueWithIdentifier:sender:, и это нарушит вашу реализацию).

Смежные вопросы