无法将故事板中的 IBOutlet 连接到 UIView 子类
Unable to connect IBOutlet from storyboard to UIView subclass
我可以右键单击并从我的自定义 UIView 子类文件拖动到故事板元素以连接它们,但反之则无法这样做。我认为这是一个 Xcode 错误。我可以做些什么来解决这个问题吗?这不是第一次发生了,而且很烦人。
我已经尝试清理并重新启动 Xcode 几次,但都没有成功。
这不起作用(从故事板右键单击到 Swift 文件)
这有效(从 swift 文件的 IBAction 右键单击到故事板)
顺便说一句,我正在使用 Xcode 8.1 和 Swift 3.0.
更新:我不是在寻找有关如何连接的答案 IBOutlets/IBActions,因为正如我在上面的问题中提到的(以及在屏幕截图中),我已经能够连接它们和应用程序运行 很好。问题更多关于为什么 Xcode 不允许我从 Storyboard > Swift 文件连接,但允许我从 Swift 文件 > Storyboard 连接。如果这个问题有误导性,我很抱歉。
IBOutlet
未连接时要检查的事项:
故事板中是否定义了class?
Select UIViewController
in storyboard
,然后在屏幕右侧,select identity inspector
并分配合适的 class.
您定义的插座类型是否与 storyboard
上的相符?
比如我们连接UIButton
,那么插座应该是这样的,写插座的代码,然后连接到视图控制器:
@IBOutlet weak var theButton: UIButton!
在 Objective-C
中创建这样的出口
@property (nonatomic, weak) IBOutlet UIView *view;
或如 swift 3
@IBOutlet weak var instruction: UILabel?
然后如图所示连接它。
有时由于子类化,连接 action 和 outlet 的正常方式不起作用。这种方式在这种情况下很方便。
另一种方法是像这样在视图控制器中手动创建按钮名称 -
@IBOutlet weak var button: UIButton!
然后通过拖动连接按钮以查看控制器,如图所示[!
PS:- 请同时清理您的派生数据。
在尝试了一些给定的解决方案后,最终起作用的是重新启动我的 macbook。这似乎是 XCode 方面的错误。好吧。
自 Xcode 8
以来,我们有时也会看到此问题,并假设这是一个 Xcode 错误。
解决方法:
把插座写在代码里@IBOutlet weak var myUiElement: UIView!
Ctrl + 从您的插座拖动到 Storyboard 中的 UI 元素
它很基本,但很容易被忽视。确保将插座拖动到的视图控制器被标记为您创建的自定义 class。
我已经按照以下流程解决了我的问题。
- 将您的 Storyboard 视图与任何其他 ViewController 连接起来。
- 现在,将您想要的 ViewController 与故事板重新连接。
希望这对你有用!!
在我的例子中,我让我的 class MyViewController
与另一个视图控制器共享一个文件,该文件实际上是以另一个 viewController 命名的。一旦我将 MyViewController
移动到它自己的文件中,它就开始工作了。
如果不清楚这里是代码版本:
/* Version one (did not work): */
// OtherViewController.swift
class OtherViewController: UIViewController {
// stuff
}
class MyViewController: UIViewController {
// could not control-drag view here to create IBOutlet/IBAction
}
/* Version two (works): */
// OtherViewController.swift
class OtherViewController: UIViewController {
// stuff
}
// MyViewController.swift
class MyViewController: UIViewController {
// yay! now I can control-drag a view here!
}
我可以右键单击并从我的自定义 UIView 子类文件拖动到故事板元素以连接它们,但反之则无法这样做。我认为这是一个 Xcode 错误。我可以做些什么来解决这个问题吗?这不是第一次发生了,而且很烦人。
我已经尝试清理并重新启动 Xcode 几次,但都没有成功。
顺便说一句,我正在使用 Xcode 8.1 和 Swift 3.0.
更新:我不是在寻找有关如何连接的答案 IBOutlets/IBActions,因为正如我在上面的问题中提到的(以及在屏幕截图中),我已经能够连接它们和应用程序运行 很好。问题更多关于为什么 Xcode 不允许我从 Storyboard > Swift 文件连接,但允许我从 Swift 文件 > Storyboard 连接。如果这个问题有误导性,我很抱歉。
IBOutlet
未连接时要检查的事项:
故事板中是否定义了class?
Select
UIViewController
instoryboard
,然后在屏幕右侧,selectidentity inspector
并分配合适的 class.您定义的插座类型是否与
storyboard
上的相符? 比如我们连接UIButton
,那么插座应该是这样的,写插座的代码,然后连接到视图控制器:@IBOutlet weak var theButton: UIButton!
在 Objective-C
中创建这样的出口@property (nonatomic, weak) IBOutlet UIView *view;
或如 swift 3
@IBOutlet weak var instruction: UILabel?
然后如图所示连接它。
有时由于子类化,连接 action 和 outlet 的正常方式不起作用。这种方式在这种情况下很方便。
另一种方法是像这样在视图控制器中手动创建按钮名称 -
@IBOutlet weak var button: UIButton!
然后通过拖动连接按钮以查看控制器,如图所示[!
PS:- 请同时清理您的派生数据。
在尝试了一些给定的解决方案后,最终起作用的是重新启动我的 macbook。这似乎是 XCode 方面的错误。好吧。
自 Xcode 8
以来,我们有时也会看到此问题,并假设这是一个 Xcode 错误。
解决方法:
把插座写在代码里
@IBOutlet weak var myUiElement: UIView!
Ctrl + 从您的插座拖动到 Storyboard 中的 UI 元素
它很基本,但很容易被忽视。确保将插座拖动到的视图控制器被标记为您创建的自定义 class。
我已经按照以下流程解决了我的问题。
- 将您的 Storyboard 视图与任何其他 ViewController 连接起来。
- 现在,将您想要的 ViewController 与故事板重新连接。
希望这对你有用!!
在我的例子中,我让我的 class MyViewController
与另一个视图控制器共享一个文件,该文件实际上是以另一个 viewController 命名的。一旦我将 MyViewController
移动到它自己的文件中,它就开始工作了。
如果不清楚这里是代码版本:
/* Version one (did not work): */
// OtherViewController.swift
class OtherViewController: UIViewController {
// stuff
}
class MyViewController: UIViewController {
// could not control-drag view here to create IBOutlet/IBAction
}
/* Version two (works): */
// OtherViewController.swift
class OtherViewController: UIViewController {
// stuff
}
// MyViewController.swift
class MyViewController: UIViewController {
// yay! now I can control-drag a view here!
}