单击搜索结果时显示空的详细信息视图
Posted
技术标签:
【中文标题】单击搜索结果时显示空的详细信息视图【英文标题】:Empty Detail View is presented when clicking on search results 【发布时间】:2013-12-27 16:23:16 【问题描述】:我有问题。我创建了一个表格视图,其中列出了学生。通过单击相应的学生,会出现相应的详细信息视图。现在我在我的项目中实现了一个带有搜索结果的搜索栏,但是每次我使用搜索栏时,都会显示一个空的详细视图(没有任何机会选择正确的搜索结果)我真的不知道为什么。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Student Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
// Configure the cell...
Student *student = nil;
if (tableView == self.searchDisplayController.searchResultsTableView)
student = [self.searchResults objectAtIndex:indexPath.row];
NSString *fullname = [NSString stringWithFormat:@"%@ %@ (%@)", student.vorname, student.name, student.hatBetrGrund.name];
cell.textLabel.text = fullname;
[self performSegueWithIdentifier:@"Detail Student Seque" sender:student.name]; // if search results are found
else
student =[self.fetchedResultsController objectAtIndexPath:indexPath];
NSString *fullname = [NSString stringWithFormat:@"%@ %@", student.vorname, student.name];
cell.textLabel.text = fullname;
cell.detailTextLabel.text = student.hatBetrGrund.name;
return cell;
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"Add Student Segue"])
AddStudent *addStudent = segue.destinationViewController;
addStudent.delegate = self;
addStudent.managedObjectContext = self.managedObjectContext;
else if ([segue.identifier isEqualToString:@"Detail Student Seque"])
DetailStudent *detailStudent = segue.destinationViewController;
detailStudent.delegate = self;
detailStudent.managedObjectContext = self.managedObjectContext;
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
self.selectedStudent = [self.fetchedResultsController objectAtIndexPath:indexPath];
detailStudent.student = self.selectedStudent;
else
NSLog(@"wow, such Fail!");
【问题讨论】:
看起来和this one的问题一样。 @Mundi 对。马文,坚持一个答案,因为以下看起来像上一个。 【参考方案1】:您的代码对我来说看起来很奇怪。为什么在cellForRowAtIndexPath
内执行segue?这不是做这件事的正确地方。这个委托应该用于考虑内容的显示。
你应该用来执行转场的方法是didSelectRowAtIndexPath
。当您单击一行时,您可以只抓取指定的用户(从纯内容或过滤的内容中)并执行 segue。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if(tableView == self.searchDisplayController.searchResultsTableView)
// grab the user from the filtered results
else
// grab the user from the plain results
// perform the segue here (I guess in both cases you need to display details of the user)
请注意,这些只是提示...
【讨论】:
哇,非常感谢。我终于做到了。不幸的是,由于代表人数少,我无法投票赞成您的答案。 我是这样做的:-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath if (self.searchDisplayController.isActive) [self performSegueWithIdentifier:@"Detail Student Seque" sender:self]; else NSLog(@"wow");
@Marvin 如果我的回答对您有帮助,您也可以标记为已回答。根据你喜欢的。干杯。
我真的很想给你的评论点赞,但恐怕我没有足够的代表,这是我的第一篇文章,刚在 28 天前开户,但我会这样做只要我被允许
@Marvin 每个问题附近都有一个复选标记。你可以点击它,它会变成绿色。以上是关于单击搜索结果时显示空的详细信息视图的主要内容,如果未能解决你的问题,请参考以下文章