我正在尝试创建一个手动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有效并让我转到目标视图控制器。
为什么?
答案 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";
}
}
特别是将数据从控制器传递到另一个,这种方式总是很有用。