当尝试将导航栏按钮连接到Xcode 6中的ViewController的Exit项目时(不确定它是否是Xcode 6问题但值得一提,因为它处于测试阶段)它没有在自定义类中找到Swift函数.
它应该找到的功能:
@IBAction func unwindToList(segue: UIStoryboardSegue) { }
我在视图上创建了另一个按钮,以确保我可以使用Swift处理IBAction并且我正确地编写了它.这很好用:
@IBAction func test(sender: AnyObject) { NSLog("Test") }
我已经看到这个问题似乎是同一个问题,但根据答案,这应该是有效的.
Xcode 6处于测试阶段,当然,Swift非常新,但是在考虑它是一个潜在的错误之前,想看看是否有人遇到过这种情况.
现在可以安装的Xcode 6 Beta 4不支持使用Objective-C解决方法,而是支持在Interface Builder中连接展开segue.您现在可以从iOS开发中心进行更新.按住Control键并从要触发segue的UI项目拖动到退出图标,并在将以下代码放入目标视图控制器后选择函数unwindToSegue.
@IBAction func unwindToSegue (segue : UIStoryboardSegue) {}
这是Xcode 6的一个已知问题:
Interface Builder无法识别在Swift类中声明的展开segue操作
为了解决这个问题,您需要:
更改class MyViewController
到@objc(MyViewController) class MyViewController
创建一个Objective-C头文件,其中包含重新声明segue操作的MyViewController类别.
@interface MyViewController (Workaround) - (IBAction)unwindToMyViewController: (UIStoryboardSegue *)segue; @end
在故事板中,选择MyViewController的实例,清除其自定义类,然后将其设置回MyViewController.
完成这些步骤后,您可以再次将按钮连接到退出项目.
Xcode 6发行说明 PDF,第10页
在可供下载的Xcode 6 Beta 4中,支持展开segues和界面构建器.我在一个小项目中亲自测试过它.
在Swift 2.3中,我发现参数的外部名称必须是"withUnwindSegue":
@IBAction func unwindToThisView(withUnwindSegue unwindSegue: UIStoryboardSegue) { ... }
我终于可以让它上班了; 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
ListTableViewController.swift
import UIKit @objc(ListTableViewController) class ListTableViewController: UITableViewController { @IBAction func unwindToList(s:UIStoryboardSegue) { println("hello world"); } }
希望有所帮助