Всякий раз, когда я искал что-то из строки поиска, я получаю правильные результаты. Когда я нажимаю на эти результаты, он связывает меня с тем же местом, с которым мои исходные результаты связывали бы меня. Другими словами, у меня есть учитель 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
Установите точку останова на 'if ([self.searchDisplayController isActive])' line in '- (void) prepareForSegue: (UIStoryboardSegue *) отправитель отправителя: (id) отправитель и убедитесь, что вы попадаете в ожидаемый часть инструкции if/else. – Brian
Примечание редактора: @Kevin, * мы никогда не изменяем код * при редактировании, только отступы и форматирование. – brasofilo