我有一个模态视图,可以从5个不同的父视图控制器中显示。此模态视图有一个按钮,可以将您带回到父VC。
我正在更新到iOS7,我认为它曾经能够使用这个单一按钮将它与我创建的所有展开segue相关联。但现在,我只能将一个单一的展开链接链接到此按钮。
我在故事板上做了所有这些(将一件事与另一件事联系起来)。
关于此问题,Xcode 5是否有任何变化?我可以处理代码上的所有内容,但它让我感到困扰的是它在GUI上不再起作用。
任何一个人?
答案 0 :(得分:1)
当我试图弄清楚如何从可以从2个不同视图控制器呈现的模态视图控制器中解开segue时,我遇到了类似的问题。我发现了一种方法,它涉及一些代码,但你可以从Storybuilder中做一些。
我必须意识到的是,我可以在两个不同的视图控制器中使用相同的展开动作方法签名。
我的应用有两个视图控制器,可以显示模态。两个视图控制器是:
的主屏幕 ExploreScreen
调用模态视图控制器:
RatingScreen
根据https://developer.apple.com/library/ios/technotes/tn2298/_index.html,我可以通过在HomeScreen.m中放置以下展开操作,从RatingScreen到HomeScreen放松:
- (IBAction)unwindFromRatingScreen:(UIStoryboardSegue *)segue {
NSLog(@"Unwinding to HomeScreen");
}
按照Apple的技术说明,我控制从我的RatingScreen上的“取消”按钮拖动到“退出”图标。它允许我从动作segue下拉列表中选择unwindFromRatingScreen。请注意,如果您没有在项目中定义至少一个展开动作,则甚至无法控制拖动到“退出”按钮。它在技术说明中提到了这一点,但并不那么明显。
无论如何,我在这一点上很困惑如何处理从RatingScreen退回到ExploreScreen的问题。事实证明,我所要做的就是放置一个与我放在HomeScreen.m中的签名相同的放卷动作。为了清楚起见,我将这个展开动作放在ExploreScreen.m中:
- (IBAction)unwindFromRatingScreen:(UIStoryboardSegue *)segue {
NSLog(@"Unwinding to ExploreScreen");
}
我很惊讶这是有效的,因为我认为在运行时会有一些歧义。 iOS如何知道要调用哪个展开动作?我猜它看起来像堆栈。也许这就是技术人员试图说的内容,但是由于我对像#34; parent"这样的术语的混淆,我无法理解它。并且"呈现"参考。
我在阅读https://medium.com/@hamderhallas/custom-ios-modal-dismiss-segue-7e21c2bcf690后想出了第二个解决方案。我认为它可能只适用于取消按钮。我不知道它是否适用于需要从模态视图控制器获取状态的提交按钮,并使用它来设置要放松到的视图控制器中的状态。解决方案只是告诉模态视图控制器解散自己。同样,iOS必须有一堆它可以参考的视图控制器,以便找出当模态被解除时要显示的视图控制器。
第二个解决方案是将以下方法放在RatingScreen.m中:
- (IBAction)cancelAction:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
我对iOS开发非常陌生,所以我相信其他人会有更多有见地的想法。但我发现这两种解决方案都解决了与您类似的问题。抱歉,我无法为您提供完全可以从Storyboard实施的解决方案。但我希望这会有所帮助。
迈克尔