Получение индексного пути self.tableview из UISearchDisplayController tableView indexpath - PullRequest
0 голосов
/ 30 июня 2011

Итак, у меня есть подробное представление, которое должно отображать информацию путем получения целочисленного индекса, вычисленного из indexpath из выбранной ячейки в 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];
}

Ответы [ 4 ]

3 голосов
/ 30 июня 2011

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

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

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

0 голосов
/ 01 января 2019

Swift версия @Deepak Danduprolu ответ:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    var selectedObject = searchedArray[indexPath.row]
    var index = OrignalArray.index(of: selectedObject)
    print("index", index) // This will give you index of selected array from the original array
}
0 голосов
/ 30 июня 2011

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

-(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];

}

0 голосов
/ 30 июня 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...