检查 Segue 的发件人

Check the Sender of a Segue

-prepareForSegue:sender: 中,如何检查 sender 是否是写入 -prepareForSegue:sender: 的视图控制器?

换句话说,我如何比较 sender 参数以查看调用 -performSegueWithIdentifier:sender:

时传递的内容

我试过了:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"identifier"]) 
        if ([(MyViewControllerClass *)sender isEqual:self]) {
            // stuff
        } else {...}
    }
}

还尝试用 == 代替 isEqual:

else 部分始终执行。

你可以试试这个

if([sender isKindOfClass:[MyViewControllerClass class]){
    //do stuff
}

更新:首先,下面的代码当然是废话,这里是 有意义的版本:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self performSegueWithIdentifier:@"segueIdentifier" sender:self];
}

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if (segue.sourceViewController == sender) {
        NSLog(@"i have been the sender");
    }
}

愚蠢的最后一个版本作为参考你不应该做什么 - 快速回答: 我想你不想检查发件人。发件人也可以是激活 segue 的 Button - 我 guess 你想检查 sourceViewController.

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if (segue.sourceViewController == self) {
        NSLog(@"i have been the source");
    }
}

这将检查 segue 是否会 转换为当前 ViewController。