好的,我想我明白了,这似乎有点像黑客,但它适用于我的目的:
我正在使用情节提要:我有一个 UITableview 控制器,上面直接带有 UISearchBarDisplayController。没有代码只是拖放。
从那里,我按照本教程让搜索栏正确搜索http://clingingtoideas.blogspot.com/2010/02/uitableview-how-to-part-2-search.html
但是 prepareForSegue: 只会让我显示原始数组中的一个单元格,而不是搜索数组。
所以我使用了didSelectRowAtIndexPath:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (savedSearchTerm) {
searchRowSelected = indexPath.row; //<-- the trick that worked
[self performSegueWithIdentifier:@"ShowDetail" sender:self];
}
}
searchRowSelected 是我在类顶部声明的一个 int 变量。
didSelectRowAtIndexPath: 知道我选择了哪一行,但 prepareForSegue 不知道。这就是为什么我需要那个变量。
这就是我在 prepareForSegue 中使用它的方式:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"ShowDetail"]) {
dvc = [segue destinationViewController];
NSIndexPath* path = [self.tableView indexPathForSelectedRow];
int row = [path row];
if (savedSearchTerm){ //set the detailViewController with the searched data cell
myDataClass* c = [searchResults objectAtIndex:searchRowSelected];
dvc.myDataClass = c;
}else{ //set the detailViewController with the original data cell
myDataClass* c = [array objectAtIndex:row];
dvc.myDataClass = c;
}
}
}
也使用此代码来清理 savedSearchTerm
-(void) searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller{
[self setSavedSearchTerm:nil];
}
如果有人有更好的解决方案,我会全神贯注:)