Получение индексного пути self.tableview из UISearchDisplayController tableView indexpath

77
9

Таким образом, у меня есть подробное представление, которое должно отображать информацию, получая целое число индекса, вычисленное из пути индекса из выбранной ячейки в self.tableview, я использовал NSFetchedResultsController для self.tableview тоже. Я также реализовал UISearchDisplayController для поиска.

Вопрос: Как преобразовать выбранный indexPath в таблицу просмотра UISearchDisplayController в путь индекса исходного self.tableview? Или мне нужно настроить экземпляр NSArray и пропустить его, чтобы узнать индекс? Какой самый эффективный способ сделать это?

Вот код:

-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
NSLog(@"display project details");
if (tableView == self.table) {
[parentController projectSelectedFromList:indexPath.row];
}else{
NSInteger index;
//what to put here? To get the indexPath of the self.table from search tableview
[parentController projectSelectedFromList:index];
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}

спросил(а) 2021-01-25T19:28:52+03:00 5 месяцев назад
1
Решение
77

Если не считать дубликатов,

id selectedObject = [searchArray objectAtIndex:indexPath.row];
index = [sourceArray indexOfObject:selectedObject];

Идея довольно проста. Получите выбранный объект вашего массива поиска, поскольку он будет отображаться непосредственно в строку пути индекса. Затем найдите индекс объекта в исходном или основном массиве. Это должно дать вам нужный вам индекс.

ответил(а) 2021-01-25T19:28:52+03:00 5 месяцев назад
45

Посмотрите, что у вас есть в tableView: cellForRowAtIndexPath: из вашего источника данных tableView (обычно это объект tableViewController). Предполагая, что вы делаете аналогичную проверку на то, используете ли вы стандартный tableView или таблицу поиска в таблице, а если нет, то фильтр поиска, безусловно, не будет эффективным - вам просто нужно иметь аналогичный код в своем Tableview: didSelectRowAtIndexPath :.


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

ответил(а) 2021-01-25T19:28:52+03:00 5 месяцев назад
45

Я нашел решение:

-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
NSLog(@"display project details");
if (tableView == self.table) {
[parentController projectSelectedFromList:indexPath.row];
NSLog(@"indexpath at orignal tableview is: %@", [indexPath description]);
}else{
NSIndexPath *indexPathForOriginal = [resultsController indexPathForObject: [self.filteredResults objectAtIndex:indexPath.row]];
NSInteger index = indexPathForOriginal.row;
[parentController projectSelectedFromList:index];
NSLog(@"indexpath at search tableview is: %@", [indexPathForOriginal description]);

}
[tableView deselectRowAtIndexPath:indexPath animated:YES];

}

ответил(а) 2021-01-25T19:28:52+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема