2011-06-29 57 views
0

所以我有一個詳細信息視圖,需要通過從self.tableview中選定的單元格的indexpath中獲取索引整數來計算信息,我一直在使用NSFetchedResultsController self.tableview也是如此。我還實現了一個UISearchDisplayController來執行搜索。從UISearchDisplayController獲取self.tableview索引路徑tableView索引路徑

問題: 如何將UISearchDisplayController tableview中選定的indexPath轉換爲原始self.tableview的indexpath?或者我需要建立一個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]; 
} 

回答

2

假設沒有重複,

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

想法是很簡單。獲取搜索數組的選定對象,因爲它將直接映射到索引路徑的行。然後在源或主數組中搜索對象的索引。這應該給你你想要的索引。

+0

謝謝。這基本上就是我所做的。技巧是找出NSFetchedResultsController的indexPathForObject方法。 :) – randomor

0

看看你有什麼你的tableView有:的cellForRowAtIndexPath:您的tableView數據源(通常是tableViewController對象)。假設你對是否在那裏使用標準tableView或者搜索tableView做了類似的檢查 - 如果你不是,那麼你的搜索過濾器肯定不會有效 - 你只需要在你的代碼中使用類似的代碼的tableView:didSelectRowAtIndexPath方法:。

如果我在這裏錯過了這一點,然後道歉...你可能需要多說一些你的問題。

+0

感謝輸入,但我沒有得到我的搜索的tableview工作,只是在尋找一種方式來選定indexPath轉換搜索的tableview到原始self.tableview的indexpath。 :) – randomor

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

}