4

加载自定义输入视图键盘后,我无法连接按钮。我的主屏幕是故事板,我的自定义视图是 xib。

输入视图是一个 nib,文件所有者指向它的 swift 类。我正在使用另一个视图控制器中的代码加载输入视图:

extension UIView {
class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> UIView? {
    return UINib(
        nibName: nibNamed,
        bundle: bundle
        ).instantiateWithOwner(nil, options: nil)[0] as? UIView
}
}

在主视图控制器中,我正在创建输入视图:

var myInputView = UIView.loadFromNibNamed("keypadInputViewController", bundle: nil)

keypadInputViewController 是 xib 及其 swift 文件的基本名称以及 swift 文件中的类名。

我使用以下方法连接此键盘:

self.widthBox.inputView = self.myInputView

然后,键盘视图会随着常规 ios 键盘的打开而打开

问题是,一旦我将 keypadInputViewController xib 中的按钮连接器添加到它的 swift 中,我就会收到崩溃消息。该消息特别提到了我创建的任何连接。“此类不符合键的键值编码”

xib 包含一个带有十几个按钮的视图。

我仔细检查了许多项目,包括:

  • 文件所有者设置为 keypadInputViewController
  • 在 Xcode 中运行干净
  • 在 iOS 模拟器中运行重置
  • 手动删除库中的派生文件
  • 删除了引用并将 xib 和 swift 文件重新添加到项目中
  • 在文件所有者和查看部分中删除了从 xib 到 swift 的所有连接
  • 关闭并重新打开 Xcode
  • 尝试了 Xcode 6.2 的 beta 4
  • 我打开了 xcode 并创建了一个测试 ios 项目,添加了一个 cocoa touch 类并使用了 create xib 复选框。一旦我添加按钮连接,测试项目就会失败并出现相同的错误。

搜索了很长时间后,我发现不将所有者设置为自我将不允许按钮连接起作用。所以我将扩展名更改为:

extension UIView {
class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> UIView? {
    return UINib(
        nibName: nibNamed,
        bundle: bundle
        ).instantiateWithOwner(self, options: nil)[0] as? UIView
}}

我仍然无法将视图设置为文件所有者。如果连接了插座,则应用程序在编译时崩溃,或者如果连接了操作,则应用程序在按下按钮时崩溃,并出现错误“无法识别的选择器已发送到类”

我不知道是我还是 Xcode。我该如何让这个键盘视图接受连接,以便继续前进?我在想也许我没有在类定义中添加一些重要的东西,或者没有正确加载这个 xib。想法?

4

0 回答 0