从UISearchDisplayController tableView indexpath获取self.tableview索引路径

时间:2011-06-29 22:07:07

标签: iphone objective-c cocoa-touch uitableview

所以我有一个详细视图需要通过从self.tableview中的所选单元格索引路径索引来显示信息,我一直在使用NSFetchedResultsController作为self.tableview。我还实现了一个UISearchDisplayController来进行搜索。

问题: 如何将UISearchDisplayController表视图中的选定indexPath转换为原始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 个答案:

答案 0 :(得分:3)

假设没有重复,

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

想法非常简单。获取搜索数组的选定对象,因为它将直接映射到索引路径的行。然后在源数组或主数组中搜索对象的索引。这应该为您提供所需的索引。

答案 1 :(得分:0)

看看你在tableView数据源的tableView:cellForRowAtIndexPath中得到了什么(通常是tableViewController对象)。假设您对是否使用标准tableView或搜索tableView进行了类似的检查 - 如果不是,那么您的搜索过滤器肯定不会有效 - 您只需要在您的代码中使用类似的代码的tableView:didSelectRowAtIndexPath方法:

如果我在这里错过了这一点,那么道歉......你可能需要在你的问题中多说一点。

答案 2 :(得分:0)

我找到了解决方案:

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

}

答案 3 :(得分:0)

@Deepak Danduprolu的

Swift 版本答案:

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
}