【问题标题】:Subview-title not displayed properly using storyboard使用情节提要未正确显示子视图标题
【发布时间】:2012-01-13 14:03:09
【问题描述】:

我有一个 tableview 和一个 detailview,与 segues 连接。 我希望详细视图的标题是所选单元格的标题。

如果我在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,并改用这行代码,详细视图会显示正确的标题,但视图未正确加载。 (阅读:我不想使用这行代码,我希望它在故事板中工作。)

如果您想查看更多代码或对以上部分内容进行澄清,请告诉我。

【问题讨论】:

  • 那么在你使用 segue 的情况下,你是否在 prepareForSegue:sender: 方法中设置了详细视图控制器的等级属性?
  • 我没有以编程方式设置详细视图控制器的序列。但我会研究你提到的方法。
  • 好吧,那将解决它。该方法是您在即将呈现的视图控制器上配置您需要配置的任何内容的机会。您可以像在 tableView:didSelectRowAtIndexPath: 中那样设置 Grade 属性

标签: iphone objective-c uitableview storyboard


【解决方案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;
    }
}

【讨论】:

  • 我搞定了,非常感谢!我发现我没有为 tableView 制作 IBOutlet,所以我无法定义 self.tableView,而且我在 table-view 上也有标识符“ShowGradeDetails”,而不是 segue。再次感谢。
【解决方案2】:

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

【讨论】:

  • 如果你的意思是我应该从 self.navigationItem.title =grade.fag 中删除“navigationItem”;这也不起作用。
猜你喜欢
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 2017-01-08
  • 1970-01-01
相关资源
最近更新 更多