使用 prepareForSegue 设置方法值

Posted

技术标签:

【中文标题】使用 prepareForSegue 设置方法值【英文标题】:Set Method Values With prepareForSegue 【发布时间】:2013-08-04 14:47:29 【问题描述】:

基本上,我使用 prepareForSegue 方法转换到情节提要中的另一个视图,我的视图必须嵌入到导航控制器中才能显示导航栏,因此我以这种方式传递变量:

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    if([segue.identifier isEqualToString:@"exploreAddSelected"])

        UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
        AddTableViewController *controller = (AddTableViewController *)navController.topViewController;
        controller.tagName = tagName;
    

我的问题是,当使用 prepareForSegue 方法时,我需要能够在实际的视图控制器中设置一些方法值,就像使用 pushViewController 时一样,如下所示:

DetailViewController *detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
detailViewController.tagName = tagName;
[detailViewController setCurrentHashtag:nil];
[navigationController pushViewController:self.detailViewController animated:YES];

我需要能够设置“setCurrentHashtag”方法,该方法在“exploreAddSelected”转到的视图控制器中声明。我该怎么做?

【问题讨论】:

我听不懂。你不是已经在controller.tagName = tagName; 这样做了吗?为什么不以controller setCurrentHashtag:nil]; 为例? 这实际上不起作用,但 controller.taganame 完全不同。 【参考方案1】:

这个问题的答案其实是非常明显的,但需要我自己提出问题才能实现答案。

你可以简单地设置:

controller.currentHashtag = nil;

currentHashtag 是视图控制器中新声明的实例。 然后在实际的视图控制器集合中:

[self setCurrentHashtag:currentHashtag];

【讨论】:

controller.currentHashtag = nil[controller setCurrentHashtag:nil] 完全相同。当您尝试后一种语法时发生了什么?【参考方案2】:

只需将 currentHashtag 添加到方法中即可。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  if([segue.identifier isEqualToString:@"exploreAddSelected"])

    UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
    AddTableViewController *controller = (AddTableViewController *)navController.topViewController;
    controller.tagName = tagName;
    [controller setCurrentHashTag:nil];  //add this line
  

我不确定你在这里做什么。如果 segue 直接指向视图控制器(也不通过另一个导航控制器),则不需要映射到 topviewcontroller,而是直接使用destinationcontroller。

【讨论】:

以上是关于使用 prepareForSegue 设置方法值的主要内容,如果未能解决你的问题,请参考以下文章

使用 PrepareForSegue 方法从 UITableView 传递到另一个

从 prepareForSegue:sender 设置 UITableView 委托和数据源时出错:

PrepareForSegue 方法使应用程序 iOS 崩溃

Swift:使用 prepareForSegue 将 UIView 容器的高度设置为嵌入式 UITableView 的高度

prepareForSegue 目标控制器属性未设置

UITableViewControllers 上的 prepareforSegue 方法