iOS 7 - 识别调用视图以正确展开的segue

时间:2014-02-22 03:55:21

标签: ios iphone objective-c uistoryboard uistoryboardsegue

我有一个UIViewController,可以通过两个不同的其他视图呈现。这是一个搜索表单,对两个视图的行为完全相同。

假设View1和View2可以执行呈现SearchView实例的segue。我怎么知道哪个视图提供了SearchView,以便我可以执行链接到相应操作的展开segue?

由于View1和View2都是TabView,我不想在每个中使用navigationController,因为我觉得它对于一个简单的任务来说有点过分。

在这个例子中:

View1.m

-(IBAction)didClickButton:
{
    [self performSegueWithIdentifier:@"searchSegue1"];
}

View2.m

-(IBAction)didClickButton:
{
    [self performSegueWithIdentifier:@"searchSegue2"];
}

SearchView.m

// Here is where I should know which segue to call
if (***ConditionToSegue1***)
    [self performSegueWithIdentifier:@"unwindToSegue1"];

else if (***ConditionToSegue2***)
    [self performSegueWithIdentifier:@"unwindToSegue2"];

这是什么情况?最好的方法是在prepareForSegue方法中设置SearchView的属性,告诉我发起调用的是什么视图?请记住,我不希望使用NavigationController。

祝你好运

4 个答案:

答案 0 :(得分:3)

在SearchView.h中添加第@property (nonatomic) int tag行。

然后在View1.m中添加以下方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"searchSegue1"])
        [segue.destinationViewController setValue:1 forKey:@"tag"];
}

在View2.m中执行相同的操作,但将1替换为2.然后将if语句更改为:

if (self.tag == 1)
    [self performSegueWithIdentifier:@"unwindToSegue1"];
else if (self.tag == 2)
    [self performSegueWithIdentifier:@"unwindToSegue2"];

答案 1 :(得分:0)

首先,您应该知道您是使用故事板还是以编程方式创建故事板以进行表演。

    1.If you directly connect the segue through the click button(one view controller to another view controller),you don't need to write your above coding.Just it is enough to give segue name. 
            click->SHOW THE ATTRIBUTES OF RIGHT SIDE UTILITY AREA.
                 ->NOW YOU CAN SEE THE STORYBOARD SEGUE WITH-IDENTIFIER,STYLE 
                 ->IN IDENTIFIER TEXTFIELD JUST GIVE YOUR SEGUE NAME(WHATEVER YOU WANT)
                   (IN STYLE-PUSH IS DEFAULT IF YOU CONNECT THE SEGUE AS A PUSH)

答案 2 :(得分:0)

在您的情况下,它可能就像[self dismissViewControllerAnimated: YES completion: nil];

一样简单

查看附近标题为展开赛段的博文。

http://chrisrisner.com/Unwinding-with-iOS-and-Storyboards

您可以将操作连接到故事板上的Exit组件,该组件将为您进行展开。

-(IBAction)reset:(UIStoryboardSegue *)segue {
    //do stuff
}

答案 3 :(得分:0)

我发现对此有一个简单的答案。显然,如果我在两个名为相同的视图控制器上创建一个展开动作,我也可以为它们创建一个展开segue。

如果我在SearchView上执行此segue,则会根据呈现它的人调用正确的操作。

这似乎现在有效,我不知道为什么或如何发生。如果有人能解释,我将不胜感激。

<强>更新 不,它没有按预期工作。尽管提供了正确的视图,但两个操作都被调用,从而导致不必要的行为。