使用故事板无法正确显示子视图标题

时间:2011-12-05 21:13:59

标签: iphone objective-c uitableview storyboard

我有一个tableview和一个detailview,与segues相关联。 我希望detailview的标题是所选单元格的标题。

如果我在GradeDetail.m中使用此代码,它可以正常工作,但当然是静态的:

self.navigationController.title = @"Title goes here";

另一方面,如果我使用它,它不起作用,但应该是动态的:

self.navigationItem.title = grade.fag;

我在必要时导入了课程Grade,并且在课堂上定义了“fag”(丹麦语中的“学校科目”,而不是同性恋)属性。

以下是tableview代码的摘录:

...
- (id)initWithCoder:(NSCoder *)aDecoder
{
if ((self = [super initWithCoder:aDecoder])) 
{
    grades = [[NSMutableArray alloc] init];

    Grade* grade = [[Grade alloc] init];
    grade.fag = @"Dansk";
    grade.mundtlig = @"7";
    [grades addObject:grade];

...    

}
return self;
}

推送详细视图的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath     *)indexPath
{    
 GradeDetail *detailViewController = [[GradeDetail alloc] init];

Grade* grade = [self.grades objectAtIndex:indexPath.row];
detailViewController.grade = grade;

//[self.navigationController pushViewController:detailViewController animated:YES];
}

请注意以上代码,我注释掉了:

[self.navigationController pushViewController:detailViewController animated:YES];

如果我删除了故事板中的segue,并使用这行代码,则详细视图显示正确的标题,但视图未正确加载。 (阅读:我不想使用这行代码,我希望它能在故事板中使用。)

请告诉我您是否希望查看更多代码或澄清上述内容。

2 个答案:

答案 0 :(得分:1)

您需要覆盖-prepareForSegue:sender:以获取传入视图控制器的挂钩并设置所需的任何属性。您还需要在故事板中指定segue标识符。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ShowGradeDetails"])
    {
        GradeDetail *detailViewController = (GradeDetail *)segue.destinationViewController;
        NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
        Grade *selectedGrade = [self.grades objectAtIndex:selectedIndexPath.row];
        detailViewController.grade = selectedGrade;
    }
}

答案 1 :(得分:0)

也许尝试设置viewController的标题:self.title = grade.fag;