无法连接@IBSegueAction

时间:2019-06-13 21:35:45

标签: segue uistoryboard xcode11 ios13 ibsegueaction

我有一个带有UIButton的单视图控制器,其中包含以下代码:

import UIKit

class ViewController: UIViewController {

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }


    @IBSegueAction
    func makeAnotherController(coder: NSCoder, sender: Any?, segueIdentifier: String?) -> ViewController? {
        return ViewController(coder: coder)
    }
}

根据Apple's docs,这是@IBSegueAction的正确签名,并且可以编译,但是我无法通过从故事板上拖动将按钮连接到@IBSegueAction现场给助理编辑。

我可以毫无问题地连接到其他渠道或行动。

有什么想法吗? Xcode 11错误或我做错了什么?


更新

简而言之,苹果公司的文档说……

  

在其源视图控制器上创建从segue到@IBSegueAction方法的连接。在支持Segue Actions的新OS版本上,该方法将被称为……IBSegueAction方法最多包含三个参数:编码器,发送者和segue的标识符。第一个参数是必需的,如果需要,其他参数可以从方法的签名中省略

我无法完成第一步(创建连接)

2 个答案:

答案 0 :(得分:1)

这是我对Apple文档的误解。当他们说...

  

在其源视图控制器上创建从segue到@IBSegueAction方法的连接。

从字面上看,是指从代表segue的行到视图控制器的拖动。

答案 1 :(得分:-1)

通过拖动创建连接尚不可行,但是您可以手动实现同一目的:

从按钮拖动到目标视图控制器,选择您想要的任何类型的segue。然后选择segue,查看属性-在选择器字段中为您的Swift方法输入ObjC选择器格式(编译器会为您生成此包装器方法)。例如。对于dependencies,ObjC选择器将为:func makeAnotherController(coder: NSCoder, sender: Any?, segueIdentifier: String?)请注意添加的“ with”。

enter image description here