【问题标题】:Unable to connect IBOutlet from storyboard to UIView subclass无法将故事板中的 IBOutlet 连接到 UIView 子类
【发布时间】:2017-04-17 08:41:25
【问题描述】:

我可以右键单击并从我的自定义 UIView 子类文件拖动到情节提要元素以连接它们,但反过来无法这样做。我相信这是一个 Xcode 错误。我能做些什么来解决这个问题吗?这已经不是第一次发生了,而且很烦人。

我已经尝试过多次清理和重新启动 Xcode,但都没有成功。

这不起作用(从故事板右键单击到 Swift 文件)

这有效(从 swift 文件的 IBAction 右键单击​​到情节提要)

顺便说一句,我正在使用 Xcode 8.1 和 Swift 3.0。

更新:我不是在寻找有关如何连接 IBOutlets/IBActions 的答案,因为正如我在上面提到的问题(以及屏幕截图中),我已经能够连接它们并且应用程序运行良好。问题更多是关于为什么 Xcode 不允许我从 Storyboard > Swift 文件进行连接,而是让我从 Swift 文件 > Storyboard 进行连接。如果问题具有误导性,我很抱歉。

【问题讨论】:

  • 是的,你可以先用鼠标选择 UILable Ctrl+ Dreg 连接到 swift 文件并创建 IBOutlets 和 IBActions
  • 尝试先编写 IBOutlet,然后将其连接到适当的视图。
  • @NikhilManapure 是的。但反之则不然。奇怪的是它在我的其他 ViewControllers 上运行良好,只是这个特定的 UIView 我无法这样做。
  • 这主要是由于 XCode 错误,因为 XCode 获得了太多更新,有时也由于 XCode 无法识别类。这种事发生在我身上太多次了。

标签: ios swift xcode interface-builder xcode-storyboard


【解决方案1】:

Xcode 8 以来,我们有时也会看到此问题,并假设这是 Xcode 错误。

作为一种解决方法:

  • 在代码@IBOutlet weak var myUiElement: UIView!写出口

  • Ctrl + 从您的插座拖动到情节提要中的 UI 元素

【讨论】:

  • 我遇到了同样的问题,但是当我按照您的描述进行操作时,运行应用程序时变量为零。 xcode 显示了连接,但我认为它并没有真正发生,因为 vars 是 nil。我正在使用 xcode 9,我知道它有很多问题,但 UIView 子类可能不支持 IBOutlets。
【解决方案2】:

它是基本的,但很容易被忽视。确保将插座拖到的视图控制器标记为您创建的自定义类。

【讨论】:

  • 创建 xib 后如何在 Xcode 中默认不切换?感谢您的回答。让我头疼不已……
【解决方案3】:

在尝试了一些给定的解决方案后,最终奏效的是重新启动我的 macbook。这似乎是 XCode 方面的一个错误。哦,好吧。

【讨论】:

    【解决方案4】:

    在 Objective-C 中创建这样的插座

    @property (nonatomic, weak) IBOutlet UIView *view;
    

    或在 swift 3 中

    @IBOutlet weak var instruction: UILabel?
    

    然后按照此图像中给出的方式连接它。

    有时由于子类化,连接动作和出口的正常方式不起作用。这种方式在这种情况下很方便。

    【讨论】:

      【解决方案5】:

      检查IBOutlet是否连接不上:

      1. 故事板中定义了类吗?

        storyboard 中选择UIViewController,然后在屏幕右侧选择identity inspector 并分配适当的类。

      2. 您定义的插座类型与storyboard 上的插座类型是否匹配? 比如我们连接UIButton,那么outlet应该是这个样子,写outlet的代码,然后连接view controller:

        @IBOutlet weak var theButton: UIButton!
        

      【讨论】:

        【解决方案6】:

        我已通过以下流程解决了我的问题。

        1. 将您的 Storyboard 视图与任何其他 ViewController 连接起来。
        2. 现在,将所需的 ViewController 与情节提要重新连接。

        希望这对你有用!!

        【讨论】:

          【解决方案7】:

          在我的情况下,我让我的class MyViewController 与另一个视图控制器共享一个文件,并且该文件实际上是以另一个视图控制器命名的。一旦我将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!
          
          }
          

          【讨论】:

            【解决方案8】:

            另一种方法是像这样在视图控制器中手动创建按钮名称 -

            @IBOutlet weak var button: UIButton!
            

            然后通过拖动将按钮连接到视图控制器,如图所示 [!

            PS:- 请同时清理您的派生数据。

            【讨论】:

              猜你喜欢
              • 2015-03-19
              • 1970-01-01
              • 1970-01-01
              • 2023-04-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-08-23
              • 2014-12-28
              相关资源
              最近更新 更多