Вы должны задать аналогичный вопрос, который является активным в настоящее время табличным представлением в вашем делете UITableViewController
, tableView:didSelectRowAtIndexPath:
.
Как вы его написали, этот метод делегата может отвечать только self.tableView
, однако вы также ожидаете, что он ответит на self.searchDisplayController.searchResultsTableView
.
Чтобы включить его, чтобы ответить на self.searchDisplayController.searchResultsTableView
, вы должны включать в себя код, подобный этому ...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == self.searchDisplayController.searchResultsTableView) {
UIViewController *destinationVC = nil;
SegueList *segueToList = nil;
NSString *mainStoryboard = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIMainStoryboardFile"];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:mainStoryboard bundle:nil];
if ([self.entity isEqualToString:self.localisedEntityDocument]) {
destinationVC = [storyboard instantiateViewControllerWithIdentifier:@"id_ViewControllerExample1"]; //insert appropriate "ID"
segueToList = [[SegueList alloc] initWithIdentifier:@"segueView"
source:self
destination:destinationVC];
} else if ([self.entity isEqualToString:self.localisedEntityTransmittal]) {
destinationVC = [storyboard instantiateViewControllerWithIdentifier:@"id_ViewControllerExample2"]; //insert appropriate "ID"
segueToList = [[SegueList alloc] initWithIdentifier:@"segueView"
source:self
destination:destinationVC];
} else {
//error logging
}
UITableViewCell *cellSegue = [tableView cellForRowAtIndexPath:indexPath];
[self prepareForSegue:segueToList sender:cellSegue];
[segueToList perform];
} else {
//Probably nothing here if you are using a storyboard segues.
}
}
Примечание выше, что вам будет необходимо ввести (или применить) на вид контроллера идентификатор цели в вашем раскадровке.
Вам также потребуется написать пользовательский отступ. Я предпочитаю, чтобы разместить шахту в верхней части класса ТВЦ, для которых они необходимы, используя код, похожий на этот ...
#pragma mark - CUSTOM SEGUE
#pragma mark
////////////////////////////////////////////////////////////
/// Subclass of UIStoryboardSegue must override -perform ///
////////////////////////////////////////////////////////////
@interface SegueList : UIStoryboardSegue
@end
@implementation SegueList
- (void)perform {
DD_TVC_List *sourceViewController = self.sourceViewController;
[sourceViewController.navigationController pushViewController:self.destinationViewController animated:YES];
}
@end
////////////////////////////////////////////////////////////
/// END of subclass of UIStoryboardSegue ///
////////////////////////////////////////////////////////////
@interface //normal TVC implementation file
И, наконец, включить соответствующий код в ваш метод ТВЦ prepareForSegue
ответить на Segue идентификатор (в моем примере код segueView
) в вашем делетете, tableView:didSelectRowAtIndexPath:
.
Вы добавляете 'UISearchDisplayController' программно или используя раскадровку? – andrewbuilder