【问题标题】:Conditional segue based on current view controller基于当前视图控制器的条件segue
【发布时间】:2013-01-11 05:36:01
【问题描述】:

所有, 我正在尝试根据当前显示的视图控制器的身份执行 segues。本质上,我已经给出了我的 VC 的故事板 ID,现在想在代码中访问它们。所以,基本上我想要一些逻辑,如果现有的视图控制器是第一个,我想执行 firstSegue,如果它是第二个,我想执行 secondSegue 等等。此外,我的 VC 是导航控制器的一部分,我知道导航控制器有一个属性,我可以在其中查看当前视图控制器或类似的东西。但我不确定那是什么。有人可以帮帮我吗?同样,我预见我的代码类似于:

(IBAction)firstButtonPressed:(id)sender
 { if (presentviewcontroller ==a) // If the current view controller Is A
 {
  [self performSegueWithIdentifier:@"segueA" sender:self];}
 if(storyboard.viewcontroller==b)//If the current view controller is B
{
  [self.performSegueWithIdentifier:@"segueB" sender:self];}


  }

有人可以帮我写一些代码吗?

【问题讨论】:

  • 我不明白这个问题。该方法 firstButtonPressed 位于已知控制器中,您不需要任何 if。如果此代码在控制器 A 中,则执行 segueA,如果在控制器 B 中,则执行 segueB。
  • @rdelmar 代码位于 A 和 B 继承的超级控制器中,因此我需要指定如果我在 A 中或在 B 中会发生什么。
  • 我认为这与您提出的另一个问题相似,并且您的故事板中有几个控制器都继承自一个共同的父级,对吗?这些控制器中的每一个是只有一个转场,还是与其他控制器有多个转场?
  • @rdelmar 没错,所有 VC 都继承自一个通用 VC。这些 VC 中的每一个都有多个 segue。
  • 这些转场是从按钮到其他控制器还是从视图控制器本身(所以你可以在代码中启动转场)?

标签: ios uibutton uistoryboard segue uistoryboardsegue


【解决方案1】:

我不确定我是否理解您的设置,但如果我认为是这样,那么您不需要知道按钮是从哪个控制器按下的。即使 2 个控制器继承自一个共同的祖先,它们仍然是独立的实例,并且只有连接到该实例的 segue 才会被调用。因此,您的每个控制器都可以有一个具有相同标识符的 segue,比如说 button1Segue。那么 AncestorController 中的代码可能就是:

-(IBAction)firstButtonPressed:(UIButton *)sender{
    [self performSegueWithIdentifier:@"button1Segue" sender:self];
}

将执行正确的转场,因为无论按下哪个实例的按钮,都只会执行该实例的转场。

【讨论】:

    【解决方案2】:

    如果您要在界面生成器中为每个视图设置不同的标签,您可以使用以下

    if (self.view.tag == 1) {
        NSLog(@"something");
    }
    

    我在我的应用中成功地使用了这种方法来处理不同的视图,并且效果很好。

    【讨论】:

    • 标签是 UIView 还是 UIViewController?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2021-11-12
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多