Xcode 6 Storyboard Unwind Segue与Swift没有连接到退出

ska*_*b11 51 xcode uibarbuttonitem ios swift

当尝试将导航栏按钮连接到Xcode 6中的ViewController的Exit项目时(不确定它是否是Xcode 6问题但值得一提,因为它处于测试阶段)它没有在自定义类中找到Swift函数.

按钮用鞭子退出

它应该找到的功能:

@IBAction func unwindToList(segue: UIStoryboardSegue) {

}
Run Code Online (Sandbox Code Playgroud)

我在视图上创建了另一个按钮,以确保我可以使用Swift处理IBAction并且我正确地编写了它.这很好用:

@IBAction func test(sender: AnyObject) {

    NSLog("Test")
}
Run Code Online (Sandbox Code Playgroud)

我已经看到这个问题似乎是同一个问题,但根据答案,这应该是有效的.

Xcode 6处于测试阶段,当然,Swift非常新,但是在考虑它是一个潜在的错误之前,想看看是否有人遇到过这种情况.

ska*_*b11 55

这是Xcode 6的一个已知问题:

Interface Builder无法识别在Swift类中声明的展开segue操作

为了解决这个问题,您需要:

  1. 更改class MyViewController@objc(MyViewController) class MyViewController
  2. 创建一个Objective-C头文件,其中包含重新声明segue操作的MyViewController类别.

    @interface MyViewController (Workaround)
    - (IBAction)unwindToMyViewController: (UIStoryboardSegue *)segue;
    @end
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在故事板中,选择MyViewController的实例,清除其自定义类,然后将其设置回MyViewController.

完成这些步骤后,您可以再次将按钮连接到退出项目.

Xcode 6发行说明 PDF,第10页

  • 这在Xcode 6 GM中得到修复.Dunno,如果它在之前的测试版中工作. (3认同)

tru*_*201 51

现在可以安装的Xcode 6 Beta 4不支持使用Objective-C解决方法,而是支持在Interface Builder中连接展开segue.您现在可以从iOS开发中心进行更新.按住Control键并从要触发segue的UI项目拖动到退出图标,并在将以下代码放入目标视图控制器后选择函数unwindToSegue.

@IBAction func unwindToSegue (segue : UIStoryboardSegue) {}
Run Code Online (Sandbox Code Playgroud)

  • 解决方法中不明确的一件事是展开segue函数必须位于展开segue的目标视图中.即它必须在你放松的视图中,而不是你放松的视图.这让我失望,但一旦我确定它有效. (20认同)
  • `@IBAction func unwindToSegue(segue:UIStoryboardSegue){}`UIUnwindSegue不可用 (3认同)
  • 经过长时间的努力,@劳伦特金雀花拯救了我 (2认同)

小智 16

我终于可以让它上班了; xcode6 IB现在非常脆弱(崩溃了很多).在将导航栏按钮项目连接到退出项目之前,我必须重新启动IDE.我最终重新创建了我的测试项目并遵循上述建议(Xcode 6发行说明PDF,第10页)以使其工作.另外,在添加.h文件时,我确保选择我的项目目标,默认情况下未选中.我还通过Cocoa Touch Class模板(vs empty swift文件)创建了我的控制器swift存根.我在导航控制器中使用了模态segue.

ListTableViewController.h

#import <UIKit/UIKit.h>

@interface ListTableViewController
- (IBAction)unwindToList: (UIStoryboardSegue *)segue;
@end
Run Code Online (Sandbox Code Playgroud)

ListTableViewController.swift

import UIKit

@objc(ListTableViewController) class ListTableViewController: UITableViewController {

    @IBAction func unwindToList(s:UIStoryboardSegue) {
        println("hello world");
    }

}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助


小智 11

在可供下载的Xcode 6 Beta 4中,支持展开segues和界面构建器.我在一个小项目中亲自测试过它.


Bob*_*son 5

在Swift 2.3中,我发现参数的外部名称必须是"withUnwindSegue":

@IBAction func unwindToThisView(withUnwindSegue unwindSegue: UIStoryboardSegue) {
    ...
}
Run Code Online (Sandbox Code Playgroud)