【问题标题】:Unwind segue doesn't work放松转场不起作用
【发布时间】:2016-06-27 22:43:33
【问题描述】:

我正在做一个使用 TableViewController 和添加/编辑项目系统的应用程序,使用相同的视图。 (但是当你添加一个项目时,视图是模态的,当你编辑它时会显示)

我关注了 Apple 的 starter tutorial,所以我的 Storyboard 基本上是这样的

通过导航控制器的 segue 用于添加,另一个用于编辑。 (我都是按照教程做的)。

我在取消项目栏按钮和 ViewController 的退出图标之间做了一个 segue,当视图以模态方式呈现时(当我尝试添加项目时)它工作得很好。

但是,当我单击一个单元格以使用显示它的 segue 到达视图时(编辑项目),导航栏中的两个项目都停止工作。 prepareForSegue 方法不再被调用。所以我无法取消或保存。

我尝试在 ViewController 本身和退出图标之间创建一个展开转场,并像这样以编程方式调用它:

@IBAction func testButton(sender: UIBarButtonItem) {
    print("we're inside")
    self.performSegueWithIdentifier("cancelSegue", sender: self)
    print("so what now")
}

当我尝试编辑它并点击取消按钮时,它只显示两条日志消息并跳过performSegueWithIdentifier 方法。但是添加仍然可以正常工作。

我是不是做错了什么,或者我误解了一些关于 unwind segues 的基本概念?

【问题讨论】:

    标签: ios xcode swift


    【解决方案1】:

    对于您的问题,这似乎是一个很奇怪的解决方案。虽然我无法具体评论为什么您的 unwind segue 在第二种情况下不起作用,但由于您以两种不同的方式显示它,因此解除 New Programsegue 会使事情变得相当复杂。

    我们常用的方法是:

    1. 使用两个完全不同的视图控制器来创建和更新资产。可能是一些重复的代码,但会让其他人更容易处理。
    2. 使用相同的视图控制器来创建和更新按钮。如果您正在编辑一个项目,您可以使用prepareForSegue 将其传递给视图控制器。当视图控制器加载时,如果存在项目,您可以更改按钮、标题等的行为。如果不存在任何项目,您就知道要创建一个新项目。
    3. 对于大多数实现,以编程方式关闭视图要简单得多。 (即[self dismissViewControllerAnimated:NO completion:nil] 用于模态视图,[self.navigationController popViewControllerAnimated:YES] 仅用于返回同一导航控制器堆栈中的 vc。

    更新

    您是否将取消按钮链接到第一个视图控制器或第二个视图控制器(带有取消和保存按钮的那个)上的退出图标?

    【讨论】:

    • 我将尝试使用您的方法找到另一种方法谢谢,(我将取消按钮和第二个视图上的退出图标链接)
    • 啊,好吧,我相信取消按钮必须转到 first 视图上的退出图标才能正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    相关资源
    最近更新 更多