iOS中的Unwind Segue返回了一个多余的视图控制器。

11

我有一个3个视图控制器的导航,其中A呈现模态控制器B,B呈现模态控制器C,均通过segue进行。C具有返回到B的unwind segue。它还有回到A的unwind。当我执行C回退到B的操作时,它会回退但是弹出B并返回A。这不是我想要的,我希望在这种情况下停留在B。下面是VC C使用的segue。

unwind segues from VC C

unwindCancel用于当用户点击collectionViewCell并返回VC B时。 prepareForUnwind只是一个标准的“取消”按钮到VC A。

以下是didSelectItem调用VC C中的unwind的代码。下面是VC C中的prepareForSegue。

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
[self performSegueWithIdentifier:@"unwindCancel" sender:self];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"unwindCancel"]) {
        GalleryDetailViewController *detailVC = segue.destinationViewController;
        detailVC.colletionCount = self.indexPathToPass;
    }
}

VC B在.m文件中取消展开

-(IBAction)unwindCancel:(UIStoryboardSegue *)segue{

    [self.collectionView scrollToItemAtIndexPath:self.colletionCount atScrollPosition:UICollectionViewScrollPositionLeft animated:YES];
}

VC A在.m文件中取消回滚

-(IBAction)prepareForUnwind:(UIStoryboardSegue *)segue {
}
2个回答

3
从C到B时,不要使用取消转场segue,只需让C调用dismissViewController即可。如果您坚持使用取消转场segue,请参考此处,特别是标题为“取消转场segue如何确定其目标视图控制器”的部分。

2
我猜你把取消返回的标识符和取消返回的动作方法混淆了。
如果你使用“prepareForUnwind”动作来构建取消返回,然后将此取消返回的标识符更改为“unwindCancel”,问题就会出现。
只需确保取消返回的标识符与其动作方法匹配即可。

1
C 中有两个取消转场,一个返回到 B,另一个返回到 A。 - noobsmcgoobs
1
@noobsmcgoobs,我重新创建了你的演示,问题不存在。所以我猜你给segue命名错误了。在你的两个unwind方法中放置“nslog”,看看哪一个被调用。 - wj2061
@noobsmcgoobs 这篇帖子与您的类似:https://dev59.com/qpDea4cB1Zd3GeqPYC6g - wj2061
名称没有错,但 VC C 也使用 prepareForUnwind 回到 A。当我从 VC 而不是按钮拖动 segue 到 Exit 时,这种情况不会发生。我会尝试发布的解决方案,但乍一看它不像解决方案中的命名错误。 - noobsmcgoobs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接