【问题标题】:After adding performSegueWithIdentifier() call, two different segues are created添加 performSegueWithIdentifier() 调用后,会创建两个不同的 segue
【发布时间】:2015-04-15 17:12:13
【问题描述】:

我在单击按钮时使用 performSegueWithIdentifier(),以便将正确的信息传递给下一个 ViewController。当我单击该按钮时,它会移动到一个新的视图空白视图,然后使用 performSegueWithIdentifier() 调用提供的信息打开我想要的视图。这需要用户点击返回按钮 2 次才能返回主视图。

有没有办法确保因为我使用 performSegueWithIdentifier() 而不会自动调用 prepareForSegue()?我感觉这种情况正在发生,因为我使用 performSegueWithIdentifier() 调用调用 prepareForSegue(),然后自动第二次调用它。

这是我使用 performSegueWithIdentifier() 方法的代码:

if (page == 1)
    [self performSegueWithIdentifier:@"time1" sender:self];
else if (page == 2
    [self performSegueWithIdentifier:@"time2" sender:self];
else if (page == 3)
    [self performSegueWithIdentifier:@"time3" sender:self];
else if (page == 4)
    [self performSegueWithIdentifier:@"time4" sender:self];
else if (page == 5)
    [self performSegueWithIdentifier:@"time5" sender:self];
else if (page == 6)
    [self performSegueWithIdentifier:@"time6" sender:self];
else if (page == 7)
    [self performSegueWithIdentifier:@"time7" sender:self];
else if (page == 8)
    [self performSegueWithIdentifier:@"time8" sender:self];
else if (page == 9)
    [self performSegueWithIdentifier:@"time9" sender:self];
else if (page == 10)
    [self performSegueWithIdentifier:@"time10" sender:self];
else if (page == 11)
    [self performSegueWithIdentifier:@"time11" sender:self];
else if (page == 12)
    [self performSegueWithIdentifier:@"time12" sender:self];
else if (page == 13)
    [self performSegueWithIdentifier:@"time13" sender:self];

这是我的 prepareForSegue() 方法:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"time1"] ||
        [segue.identifier isEqualToString:@"time2"] ||
        [segue.identifier isEqualToString:@"time3"] ||
        [segue.identifier isEqualToString:@"time4"] ||
        [segue.identifier isEqualToString:@"time5"] ||
        [segue.identifier isEqualToString:@"time6"] ||
        [segue.identifier isEqualToString:@"time7"] ||
        [segue.identifier isEqualToString:@"time8"] ||
        [segue.identifier isEqualToString:@"time9"] ||
        [segue.identifier isEqualToString:@"time10"] ||
        [segue.identifier isEqualToString:@"time11"] ||
        [segue.identifier isEqualToString:@"time12"] ||
        [segue.identifier isEqualToString:@"time13"])
    {
        InfoViewController *ivc = [segue destinationViewController];
        if (_stringText != nil)
            ivc.viewText = _stringText;
    }//end if
}//end prepareForSegue

【问题讨论】:

  • 你应该尝试用一些循环来做所有的代码,只是一个改进你的代码的建议:)
  • @LinusG。好的,谢谢,但是这个问题呢?
  • 不知道 ????否则我也会回答...

标签: ios objective-c xcode segue


【解决方案1】:

您正在执行哪些操作?你的 performSegueWithIdentifier 方法不应该调用自己,这绝对是你得到两个后退按钮的原因。你在故事板中也有这个吗?如果您在情节提要中设置了转场,您甚至可能根本不需要 performSegueWithIdentifier 调用,然后您只需为每个转场做准备。

【讨论】:

  • 我确实在我的故事板中设置了它,但我认为我应该这样做。我控制拖动按钮到下一个视图控制器,以便它显示下一个视图控制器,我将该segue命名为“time1”,然后在代码中我实现了performSegueWithIdentifier。我确实需要使用这个方法调用。我不应该在我的故事板中设置它吗?如果是这样,我将如何为 segue 提供标识符?
  • 所以这取决于你将它连接到哪里...这些在按钮、单元格上吗?如果您控制从视图控制器单击到视图控制器,那么您需要调用 perform.如果您控制从按钮单击到视图控制器,那么您不需要调用 perform.我希望这会有所帮助
  • 这些是按钮。我单击了视图控制器的按钮,但我之前的问题是我需要调用 perform 以确保下一个视图控制器接收到正确的字符串。正如您在我的准备中看到的那样,我将 NSAttributedString 提供给下一个视图控制器。该字符串因单击的按钮而异。这就是为什么我调用 perform 以便使用正确的字符串。
  • prepare 调用正在设置这些字符串,而不是执行,对吧?
  • prepare 正在将我的第二个视图控制器中的字符串初始化为我的第一个视图控制器中已设置的字符串。 perform 是根据按下的按钮调用prepare。
猜你喜欢
  • 2015-12-18
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
  • 2012-10-03
相关资源
最近更新 更多