所以我有一个详细视图需要通过从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];
}
答案 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)
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
}