2015-11-04 67 views
0

我试图以自编的方式在我的主视图控制器上放置自定义视图类的视图。这里是我的代码:自定义视图类中init编码器函数的问题

import UIKit 

class BarControl: UIView { 

// MARK: Initialization 

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

    let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44)) 
    button.backgroundColor = UIColor.redColor() 
    button.addTarget(self, action: "ratingButtonTapped:", forControlEvents: .TouchDown) 
    addSubview(button) 

} 

override func intrinsicContentSize() -> CGSize { 
    return CGSize(width: 240, height: 44) 
} 


} 

在我主视图控制器:

let myView = BarControl() 

的错误出现说:“缺少在调用参数‘编码器’参数”

我应该怎么放在let myView = BarControl()的括号内?

+0

什么是BarControl类型?你有代码中的'RatingControl',从这里不清楚'BarControl'是什么# –

回答

0

的fonction原型看起来像这样:

required init(coder aDecoder: NSCoder!) { 
     super.init(coder: aDecoder) 
     // Your code here 
    } 

我不认为你需要选购?

+0

不幸的是,我仍然得到相同的错误 –

1

当我继承UIView时,我总是覆盖init(frame:CGRect)并添加任何额外的实现。然后xcode通常会告诉你 - 'required':初始化'init(coder :)'必须由'UIView'的子类提供,如果你点击那个错误并点击输入它会自动添加额外的初始化工具。那么,我一直在做这个,而没有完全理解为什么我必须添加额外的初始化我从来没有使用。你的问题终于让我找到了原因。我在下面的链接中找到了关于此初始值设定项混淆的一个很好的教程(?)。 (?)

http://www.edwardhuynh.com/blog/2015/02/16/swift-initializer-confusion/

这是关于你的困惑了一篇短文=)

基本上是你的问题的答案是,你应该重写的init()调用BarControl()代替的init(编码器aDecoder: NSCoder!)。另外,根据文章,你必须添加所有UIView的初始化器来使用你想要使用的初始化器。

+0

哼,我认为有其他的方式来做到这一点,我希望如此:d有初始化这个简单的目的...我已经遇到了过去的问题,但避免了与遗忘的其他方式。好文章 – 2015-11-04 09:57:46