如何检查使用了哪个 segue
Posted
技术标签:
【中文标题】如何检查使用了哪个 segue【英文标题】:How to check which segue was used 【发布时间】:2013-04-23 10:48:26 【问题描述】:我有两个 segue 导致相同的 viewController
。有 2 个按钮使用 2 个 segues 连接到同一个 viewController
。在那个viewController
中,我需要检查单击了哪个按钮。所以实际上我需要检查使用/执行了哪个segue。如何在 viewControllers 类中检查这一点?我知道有 prepareForSegue
方法,但我不能将它用于我的目的,因为我需要将 prepareForSegue
放在 2 个按钮所在的类中,我不希望它在那里,但我想要它在viewControllers
类,因为我需要访问和设置该类中的一些变量。
【问题讨论】:
【参考方案1】:你需要在第一个viewcontroller的prepareforsegue方法中设置第二个viewcontroller的变量。它是这样完成的:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if([segue.identifier isEqualToString:segueIdentifier1])
SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController;
if(sender.tag == ...) // You can of course use something other than tag to identify the button
secondVC.identifyingProperty = ...
else if(sender.tag == ...)
secondVC.identifyingProperty = ...
然后您可以在第二个 vc 中检查该属性以了解您是如何到达那里的。如果您在情节提要中为 2 个按钮创建了 2 个 segue,则仅 segue 标识符就足以设置相应的属性值。然后代码变成这样:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if([segue.identifier isEqualToString:segueIdentifier1])
SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController;
secondVC.identifyingProperty = ...
else if([segue.identifier isEqualToString:segueIdentifier2])
SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController;
secondVC.identifyingProperty = ...
【讨论】:
我已经做到了,但是当我把这个: PageScrollViewController *controller = (PageScrollViewController *)segue.destinationViewController;控制器.startStory = YES;应用崩溃 *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIViewController setStartStory:]:无法识别的选择器发送到实例 0x9976420”*** 第一次抛出调用堆栈: 奇怪的部分是错误说明了“setStartStory”,但我从未使用过这个?我使用 startStory setStartStory 是为您的属性 startStory 自动生成的设置器。你合成 startStory 了吗? setStartStory 是 startStory 的 setter 方法,当你合成(在最新的 Xcode 中自动合成)属性时自动生成【参考方案2】:所以首先你需要直接在storyborads中设置你的segues标识符,或者通过你的代码使用performSegueWithIdentifier
方法。
独立于您选择的方式,您的视图控制器将触发以下方法,因此您需要覆盖它以了解哪个 segue
发送消息,您可以这样做:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"ButtonSegueIdentifierOne"])
// button 1
if ([segue.identifier isEqualToString:@"ButtonSegueIdentifierTwo"])
// button 2
【讨论】:
以上是关于如何检查使用了哪个 segue的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中使用 shouldPerformSegue() 检查字段后如何继续使用 segue
使用多个 Segue |如何使用 Cell 数据来执行特定的 Segue