单击搜索结果时显示空的详细信息视图

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 每个问题附近都有一个复选标记。你可以点击它,它会变成绿色。

以上是关于单击搜索结果时显示空的详细信息视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 json 对象的列表视图中搜索?

Volley 首次加载活动时显示空错误

如何使 jqgrid 仅在我们搜索时有效(显示数据)?

JSON NSDictionary 在输出到日志时显示空描述

蜂巢表在显示数据时显示空输出

尝试显示从服务器对象检索到的值时显示空值