以编程方式segue..works永远

时间:2017-10-09 20:14:36

标签: ios objective-c iphone uiviewcontroller

我正在尝试创建一个手动segue,只有在某个conidition(成功登录)时才会发生。

我遵循的步骤是:

1)我在源视图控制器中创建了一个按钮,并通过目标视图控制器拖动来连接按钮。

2)我设置了segue的标识符,称之为login_ok

3)我创建了-(IBAction)buttonPressed:(id)sender

现在,我试着做一个例子,看看是否有效。我写道:

- (IBAction)buttonPressed:(id)sender
{
    BOOL test = false;
    if(test == true)
    {
        [self performSegueWithIdentifier:@"login_ok" sender:self];
    }

从理论上讲,segue应该not有效,因为我设置了test=false,并且我说segue只有在test = true时才有效。

但是 segue有效并让我转到目标视图控制器。

为什么?

2 个答案:

答案 0 :(得分:0)

如果您通过拖动将按钮连接到目标控制器,则无论如何都应该进行切换。

您需要在屏幕之间连接segue,而不是从按钮连接到屏幕。然后,您可以从代码中控制您的segue。

答案 1 :(得分:0)

您应该在控制器之间定义segue,而不是从按钮到控制器。在视图控制器之间定义segue比从任何组件定义segue到视图控制器更有用,因为当你想对任何动作使用条件时,你可以有效地使用这两种方法

[self performSegueWithIdentifier:@"segueID" sender:self];

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

例如:

- (IBAction)buttonPressed:(id)sender
{
    BOOL test = YES;
    if(test == YES)
       [self performSegueWithIdentifier:@"login_ok" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   if ([[segue identifier] isEqualToString:@"login_ok"])
   {
       YourNextController *controller = [segue destinationViewController];

       controller.welcomeText = @"Hi! Test is true congratulations";
   }
}

特别是将数据从控制器传递到另一个,这种方式总是很有用。