使用 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 的高度