无法想象如何使用Swift将UIView类连接到IB中的View

时间:2014-08-30 01:17:13

标签: xcode swift interface-builder xcode6 uicontrol

**更新** 我正在研究Swift中的一个想法,似乎无法弄清楚如何将视图连接到视图类。

我在IB中有一个UIViewController和一个与IB中的UIViewController相关联的UIViewController类。在UIViewController和药物在UIView IB中。我想给UIView它自己的课。我在View中有一个Text Field,我希望UIView类能够处理该文本字段的所有设置代码。我能够创建UIView类,但我也能够将它设置为IB中View的bast类。我不是100%肯定的是如何初始化这个类,以便我可以在UIView类中创建变量并控制将它们拖到IB中的文本字段,

*更新* 这是我的代码到目前为止..它似乎至少在做什么,但我收到了胎儿错误打印消息

import UIKit

class AddPlayerView: UIView
    @IBOutlet weak var inputPlayerOne: UITextField!
    @IBOutlet weak var addPlayerOne: UIButton!

    override init(frame: CGRect) {
        super.init(frame: frame)
        // Initialization code

        println("init add player")

    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

这是我打印出来的

致命错误:init(编码器:)尚未实现:

3 个答案:

答案 0 :(得分:1)

我只是没有得到你的问题。使用IB初始化视图将触发init(编码器aDecoder:NSCoder)而不是init(帧:CGRect),这是标准的。现在,如果你担心的是访问一些非初始化的变量,那么只需覆盖func awakeFromNib()。并使用super

实现所需的初始化程序
required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

override awakeFromNib(){
    // Initialization code
}

这有意义吗?

答案 1 :(得分:0)

您可以按照以下步骤创建一个Outlet(使用Xcode6-Beta6 + Swift测试):

  1. 在Xcode中激活 助理编辑器 (你应该在屏幕左侧有一个Storyboard,在右边有Swift代码)
  2. 在左侧选择一个视图(现在右边你应该有与该视图相关的Swift控制器)
  3. 在左侧执行右键单击UI元素(例如视图中的UIButton)
  4. UI元素
  5. 上会出现一个深色透明面板
  6. 左键点击商品 新参考商品
  7. 附近的 “圈子/加号” 按钮>
  8. 继续按住左键并将一条线拖到Swift控制器上(例如,您将声明一个实例属性)。
  9. 释放左键单击
  10. Xcode会要求您为Outlet命名,输入“button”
  11. 之类的内容
  12. 点击连接
  13. 完成。现在,在您的快速课程中,您可以参考您的UIButton。

    class ViewController: UIViewController {
    
        @IBOutlet weak var button: UIButton!
        ...
    

    希望这有帮助。

答案 2 :(得分:0)

Storyboard使用它自己的初始化程序:init(coder:)来初始化它的xib。这也意味着如果您覆盖一个初始化程序,则必须覆盖故事板的required初始化程序(前面提到的coder)。看起来好像是这样做的,但出于某种原因,您已将fatalError("init(coder:) has not been implemented") as your code放入required init(coder aDecoder: NSCoder)
这意味着每次初始化视图时,都会调用该方法,当然它会引发致命错误并导致应用程序崩溃。我们必须更换该代码。请务必在方法开头调用super.init(coder: aDecoder),然后再放置其余的初始化代码。
您可能还会发现此Stack Overflow答案很有用:Fatal error: use of unimplemented initializer 'init(coder:)' for class
如果您有任何其他问题,请告诉我。祝你好运!