我正在使用相机应用程序,其中相机视图以模态显示.完成裁剪后.我执行一个放松的segue MainPageViewController.(请看截图)

我的展开功能MainPageViewController如下:
@IBAction func unwindToMainMenu(segue: UIStoryboardSegue) {
self.performSegueWithIdentifier("Categories", sender: self)
}
Run Code Online (Sandbox Code Playgroud)
其中,"类别"是从推SEGUE标识符MainPageViewController到CategoriesTableViewController.
程序进入unwindToMainMenu函数但不执行push segue.知道如何解决这个问题吗?
注意:我发现了同样的问题,但答案建议改变故事板结构.
我创建了两个视图控制器.我从第一个到第二个创建了一个segue来传递数据.现在我想将数据从第二个视图控制器传递到第一个视图控制器.我经历了许多类似的问题而我无法实现这些问题,因为我缺乏有关如何解开的知识.
ViewController.swift
class ViewController: UIViewController
{
var dataRecieved: String?
@IBOutlet weak var labelOne: UILabel!
@IBAction func buttonOne(sender: UIButton)
{
performSegueWithIdentifier("viewNext", sender: self)
}
override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!)
{
var svc: viewControllerB = segue.destinationViewController as! viewControllerB
svc.dataPassed = labelOne.text
}
}
Run Code Online (Sandbox Code Playgroud)
这会将数据传递给视图控制器"viewControllerB"中的dataPassed.说,现在我想将一些数据从viewControllerB传递到ViewController中的dataRecieved.如何只使用unwind segue而不是使用委托来完成此操作.我对迅捷很新,会很感激详细解释.
我刚刚想出了什么是一个放松的segue以及如何使用它与这个问题的好答案.非常感谢.
但是,这是一个像这样的问题:
假设在场景B中有一个按钮可以展开到场景A的一个按钮,在它被分割之前我想要做一些事情,比如将数据保存到数据库.我在B.swift中为这个按钮创建了一个动作,但它似乎直接进入了场景A而没有采取指定的动作.
谁知道为什么或如何做到这一点?
谢谢.

我有一个标签栏控制器,它是初始视图控制器,PFLoginViewController如果用户没有登录,它也有一个小工具.登录/注册流程正常.
这两个标签是1.a UICollectionView,我IntroVC将从现在开始参考2. UITableView我将称之为FeedVC
当用户点击照片时IntroVC,会触发显示segue(通过prepareForSegue),显示第3个屏幕(UIView),这在技术上不是标签.我SelectVC将从现在开始称之为.
注意:所有这些屏幕也嵌入(ded)在导航控制器中.
所述SelectVC显示相片,并有一个UIButton,用户可以按下触发一个显示赛格瑞身心SEGUE到图像推入FeedVC.我创建Unwind segue的原因是因为没有它,图像会进入FeedVC(第二个选项卡),但第一个选项卡仍然会突出显示.
我用Unwind segue解决了这个问题,但是我注意到我遇到了一个问题,在选择之后,当我按下第一个选项卡(Intro VC)时,导航栏有一个后退按钮,我使用SelectVC按钮推的次数越多图像,我必须按回的次数越多IntroVC.我对如何解决这个问题感到非常困惑.很明显,我没有正确地连接流程,而且似乎IntroVC是多次生成?
当我在模拟器中浏览segues时,我在控制台中收到以下消息:
Nested pop animation can result in corrupted navigation bar
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
相关代码如下.
IntroVC.swift
@IBAction func unwindToIntroView(segue: UIStoryboardSegue) {
self.tabBarController!.selectedIndex = 1
override func prepareForSegue(segue: …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个刽子手游戏,并且在解开细分时遇到麻烦.我有多个视图控制器,最终导致相同的视图,用户在其中播放实际的刽子手.但是,根据呈现控制器,我希望游戏处于不同的"模式"(即:多人游戏,单人游戏等).我正在尝试添加一个解除前一个视图控制器的游戏按钮,但是当用户可以使用多个路径到达此视图时,我不确定如何展开.
换句话说,我的应用程序有点:
A - > B - > C或
A - > D - > C其中C可以(理想地)展开到D或B.
我想知道实现这个的最佳方法是什么?我应该只将所有视图控制器嵌入导航控制器吗?或者有没有办法根据某种条件呈现某个视图控制器?感谢您的任何帮助!
我有一个3视图控制器导航,其中A呈现模态控制器B,它通过segue呈现模态控制器C. C有一个展开SEGUE回到B.它也有一个开卷回答:当我执行对C放松到B,它解开行动,但随后弹出B和追溯到答:这不是我想要的,我想在这种情况下,它留在B.下面是VC C使用的segues.
unwindCancel用于当用户点击collectionViewCell并返回VC B. prepareForUnwind只是VC A的标准"取消"按钮.
下面是在VC C中调用unwind的didSelectItem的代码.下面是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;
}
}
Run Code Online (Sandbox Code Playgroud)
VC B在.m文件中展开
-(IBAction)unwindCancel:(UIStoryboardSegue *)segue{
[self.collectionView scrollToItemAtIndexPath:self.colletionCount atScrollPosition:UICollectionViewScrollPositionLeft animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
VC在.m文件中展开
-(IBAction)prepareForUnwind:(UIStoryboardSegue *)segue {
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在iOS 10和Swift 3中测试unwind segue.
我在TableViewController类中添加了segue的代码,并在表视图控制器场景中连接"取消"按钮和退出:
@IBAction func unwindToRootViewController(segue: UIStoryboardSegue) {
print("Unwind to Root View Controller")
}
Run Code Online (Sandbox Code Playgroud)
但我的简单segue不起作用.我究竟做错了什么?
我刚开始使用Xcode 6(beta 6)在iOS8上测试我的iOS7应用程序.我知道iOS 8已经弃用了"推"和"模态"segue,但我很高兴地发现我所有的segue都工作了......除了一个.
我构建了一个演示应用程序,以显示如果您的应用程序使用带有UINavigationController的UITabBarController,则从模态segue展开似乎会被破坏.(我看到了另一个放松的segue帖子,但是它使用的是swift,我的演示应用程序使用的是obj-c).
以下是我更具体的看法:[UITabBarContoller] - > [UINavigationController] - > [SomeViewController] - (模态Segue) - > [此ViewController无法解除]
有趣的是,你可以放松,如果你做另一个模态segue:[UITabBarContoller] - > [UINavigationController] - > [SomeViewController] - (模态Segue1) - > [这个ViewController不能放松] - (Modal Segue2) - > [这个ViewController可以放松]
我还发现如果我删除UITabBarController或UINavigationController我可以放松,但我不打算改变我的整个应用程序UI架构:)
从我所看到的,根视图控制器永远不会收到对canPerformUnwindSegueAction的调用:fromViewController:withSender:它在iOS7中执行.
我的问题:我是否应该采用不同的方式让我放松工作?
谢谢阅读.
演示代码在这里:https://github.com/nmsasaki/UnwindDemo
UPDATE
这个问题似乎已经被iOS8.1修复了.(iOS 8.0解决方法是创建UINavigationController的自定义子类继续工作.)
我(通过其设置呈现使用自定义过渡模态的视图控制器modelPresentationStyle到UIModalPresentationCustom,提供了一个过渡代表,和UIViewControllerAnimatedTransitioning对象).
在提供的视图控制器中,我有一个unwind segue连接到一个按钮.塞古火灾很好; IBAction调用呈现视图控制器中的方法,并且在呈现的视图控制器中也是如此prepareForSegue.但是,呈现的视图控制器不会被解除,并且animationControllerForDismissedController:不会调用适当的转换委托方法().
但是,如果我将呈现的视图控制器设置modalPresentationStyle为UIModalPresentationFullScreen(默认值),则视图控制器将被正确解除(但这会破坏我的自定义转换).
我完全不知道该做什么.我查看了Apple的文档,并没有注意到任何说在处理自定义转换时必须使用unwind segue做特殊事情的事情.
我知道我可以使用呈现视图控制器dismissViewControllerAnimated:completion:的IBAction方法调用,但我宁愿使用它作为最后的手段,让它按照它应该的方式工作(或者至少知道它为什么不起作用:) ).
任何帮助将非常感激,
提前致谢
我有一个我正在开发的应用程序的问题.
场景:我有一个mainVC(ViewController),它调用一个模态呈现的secondaryVC.在secondaryVC中进行选择后,我按下UIButton,通过展开segue返回mainVC.
在secondaryVC中,转换配置为"Cross Disolve"和Presentation,作为"Over Current Context"以将上一个视图视为背景(背景配置为50%不透明度):
症状:在这种情况下,当通过展开segue返回时,viewDidAppear永远不会被调用.我需要调用它来执行进一步的检查功能.它被调用,如果不是"过度上下文",我将演示文稿设置为"全屏",但在这种情况下,我无法将前一个视图视为背景.
问题:如何通过mainVC调用viewDidApper来保持secondaryVC的透明度?
PS:对不起,如果我在写这个问题时遗漏了什么; 这是我的第一次.我搜索了这个和其他论坛,我还没有找到解决方案(或者我没有找到它).
unwind-segue ×10
ios ×9
swift ×6
segue ×4
ios8 ×1
objective-c ×1
swift3 ×1
transparency ×1
xcode ×1
xcode6-beta6 ×1