![](/img/trans.png)
[英]How to get selected row from UITableView with Search Display Controller
[英]How to know the row from the whole tableview selected in a search of my Search Display Controller?
就像标题所说的那样,在我的代码中,当我在应用中进行搜索时,这种情况很简单:
stations = [barcelona, madrid, valencia, badajoz]
当我输入“ ba”时,它显示:
mysearch = [barcelona, badajoz]
我要选择badajoz,因此程序返回的行是位置1,而站中的位置是3。
任何想法?
PD:与搜索相关的代码
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF contains[cd] %@",
searchText];
self.searchResults = [self.allItems filteredArrayUsingPredicate:resultPredicate];
}
#pragma mark - UISearchDisplayController delegate methods
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller
shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex:[self.searchDisplayController.searchBar
selectedScopeButtonIndex]]];
return YES;
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller
shouldReloadTableForSearchScope:(NSInteger)searchOption
{
[self filterContentForSearchText:[self.searchDisplayController.searchBar text]
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex:searchOption]];
return YES;
}
编辑:我使用下面的答案编辑了我的代码-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {NSLog(@“ Pushing ...”); NSUInteger行= [indexPath行]; //搜索视图之前的旧代码
//index from the search
id searchResult = [searchResults objectAtIndex:row];
int indexForResult = [ListaEstaciones indexOfObject:searchResult];
//more stuff
编辑:现在它适用于这种情况:与所有元素的列表,它很好地搜索,当我开始搜索它工作得很好,问题是当停止搜索并且我选择它仍然使用的所有元素的列表中的行之前在搜索项列表中的索引,这是因为在此代码中,我将搜索布尔变量更改为YES:
- (void)filterContentForSearchText:(NSString*)searchText
scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF contains[cd] %@",
searchText];
self.searchResults = [self.allItems filteredArrayUsingPredicate:resultPredicate];
searching = YES;
但是,当我返回所有值列表时,我不知道将搜索值更改为NO。 有什么建议么? 非常感谢。 编辑2:使用此网站解决了http://engineeringtheworld.wordpress.com/2011/04/11/detecting-when-clear-is-clicked-in-uisearchbar-x-button/
如果有对象,则可以在数组中找到它的索引。 使用顶部的示例:
id searchResult = [mysearch objectAtIndex:1];
int indexForResult = [stations indexOfObject:searchResult];
如果您不执行搜索,则不会处理这两个语句,因为它们没有意义。 要阻止它们被处理,需要将它们放在if语句中,并检查是否进行了搜索。
在查看了错误之后,似乎您有一个包含1160个对象的数组,并且您的代码正在请求对象2147483647。这显然不存在,因此代码崩溃。 为什么您会收到此错误,我不太确定,只有您才能真正回答。 使用断点和调试器找出代码出了问题的地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.