如何从不同的segues中执行不同的操作?

时间:2016-10-05 04:21:42

标签: ios swift segue

我有一个AController,其中2个segues连接到BController

AController我写了这个:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "FirstSegue"{
        // do something 
    }
    if segue.identifier == "SecondSegue"{
        // do something 
    }
}

然后来BController,我正在寻找:

if AController.segue.identifer == "FirstSegue"{
    // do something
}

if AController.segue.identifer == "SecondSegue"{
    // do something
}

我该怎么办?

这是故事板 enter image description here

3 个答案:

答案 0 :(得分:3)

在BController中获取一个bool变量

var isFromA:Bool!

在AController中:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "FirstSegue"{
        let vc = segue!.destinationViewController as! BController 
        vc.isFromA = true
    }
    if segue.identifier == "SecondSegue"{
        let vc = segue!.destinationViewController as! BController 
        vc.isFromA = false
    }
 }

在BController中:

if isFromA == true{
    // do something
} else {
    // do something
}

答案 1 :(得分:0)

与Mr.UB的答案类似,你也可以创建一个存储segue字符串值的变量:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "FirstSegue"{
        let viewController = segue!.destinationViewController as! BController 
        viewController.sourceSegue = "FirstSegue"
    }
    if segue.identifier == "SecondSegue"{
        let viewController = segue!.destinationViewController as! BController 
        viewController.sourceSegue = "SecondSegue"
    }
}

所以你可以做这样的事情(在BController中),这更接近你原来的想法:

var sourceSegue: String!

if sourceSegue == "FirstSegue"{
    // do something
} else if sourceSegue == "SecondSegue"{
    // do something
}

答案 2 :(得分:0)

您可以做的是在View controller B中设置一个公共BOOL属性

@interface ViewControllerB
@property(nonatomic) BOOL isFirst;
@end

在准备ViewControllerA的segue时,您可以访问目标viewcontroller

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.

    if([[segue identifier] isEqualToString:@"FirstSegue"]){
        ViewControllerB * objVC = (ViewControllerB*)[segue destinationViewController];
        objVc.isFirst = TRUE;
    }

if([[segue identifier] isEqualToString:@"SecondSegue"]){
        ViewControllerB * objVC = (ViewControllerB*)[segue destinationViewController];
        objVc.isFirst = FALSE;
    } 
}

然后在ViewControllerB的viewDidLoad中你可以根据属性isFirst执行不同的选项,

if(self.isFirst == TRUE){
//Perform First Segue functions
}else{
//Perform Second Segue Actions
}
相关问题