条件segue取决于函数的返回值

时间:2014-04-16 04:08:16

标签: ios objective-c segue

我的父视图控制器有两个辅助视图控制器(CriteriaViewController和MatchCenterViewController)可以切换到。

我想要做的是,如果“eBayCategorySearch”云代码函数返回值“1”,则将其置于MatchCenter,如果返回值“0”,则置于CriteriaView。

我试图设置一些可以做到这一点,但它没有正常运行。我怎样才能以编程方式设置这个segue?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if (sender != self.nextButton) return;

    if (self.itemSearch.text.length > 0) {

        [PFCloud callFunctionInBackground:@"eBayCategorySearch"
                           withParameters:@{@"item": self.itemSearch.text}
                                    block:^(NSString *result, NSError *error) {

                                        if (!error) {

                                            NSLog(@"The result is '%@'", result);

                                            if ([result intValue] == 1) {

                                                [self presentModalViewController:MatchCenterViewController
                                                                        animated:YES];
                                            }
                                            else {
                                                [self presentModalViewController:CriteriaViewController
                                                                        animated:YES];
                                            }
                                        }
                                    }];
    }
}

1 个答案:

答案 0 :(得分:1)

如第一条评论中所述,您不应在prepareForSegue中确定一个segue,因为它已在那里确定。

您可以为nextButton创建IBAction并确定其中的segue

- (IBAction)nextButtonTapped:(id)sender
{
    if (self.itemSearch.text.length > 0) {
        [PFCloud callFunctionInBackground:@"eBayCategorySearch"
                           withParameters:@{@"item": self.itemSearch.text}
                                    block:^(NSString *result, NSError *error) {
                                        if (!error) {
                                            NSLog(@"The result is '%@'", result);

                                            if ([result intValue] == 1) {
                                                [self performSegueWithIdentifier:@"ShowMatchCenterSegue" sender:self];
                                            } else {
                                                [self performSegueWithIdentifier:@"ShowCriteriaSegue" sender:self];
                                            }
                                        }
                                    }];
    }
}

现在您应该使用此操作连接下一个按钮,并在IB中为您的segue设置标识符。

此外,您可以使用prepareForSegue在视图控制器之间传输数据

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ShowMatchCenterSegue"]) {
        MYMatchCenterViewController *matchCenterViewController = [segue destinationViewController];
        matchCenterViewController.data = self.someData;
    } else {
        ...
    }
}