【发布时间】:2015-04-26 08:27:12
【问题描述】:
我有以下在 Swift 1.2 之前完美运行的 init 方法。
init(items: NSArray, views: NSArray, showPageControl: Bool, navBarBackground: UIColor){
super.init()
在 Swift 1.2 中,super.init() 的行会引发错误:
Must call a designated initializer of the superclass 'UIViewController'
问题是我只有两个可能的超级初始化方法来调用一个是codec,另一个是nib。这两个我都无法在这个 init 方法中访问。
如何更正 init 方法以使其适用于 Swift 1.2?
class SLPagingViewSwift: UIViewController, UIScrollViewDelegate {
init(items: NSArray, views: NSArray, showPageControl: Bool, navBarBackground: UIColor){
super.init()
needToShowPageControl = showPageControl
navigationBarView.backgroundColor = navBarBackground
isUserInteraction = true
var i: Int = 0
for item in items{
if item.isKindOfClass(UIView.classForCoder()){
var v = item as UIView
var vSize: CGSize = v.isKindOfClass(UILabel.classForCoder()) ? self.getLabelSize(v as UILabel) : v.frame.size
var originX = (self.SCREENSIZE.width/2.0 - vSize.width/2.0) + CGFloat(i * 100)
v.frame = CGRectMake(originX, 8, vSize.width, vSize.height)
v.tag = i
var tap = UITapGestureRecognizer(target: self, action: "tapOnHeader:")
v.addGestureRecognizer(tap)
v.userInteractionEnabled = true
self.navigationBarView.addSubview(v)
self.navItems.addObject(v)
i++
}
}
if (views.count > 0){
var controllerKeys = NSMutableArray()
i = 0
for controller in views{
if controller.isKindOfClass(UIView.classForCoder()){
var ctr = controller as UIView
ctr.tag = i
controllerKeys.addObject(NSNumber(integer: i))
}
else if controller.isKindOfClass(UIViewController.classForCoder()){
var ctr = controller as UIViewController
ctr.view.tag = i
controllerKeys.addObject(NSNumber(integer: i))
}
i++
}
if controllerKeys.count == views.count {
self.viewControllers = NSDictionary(objects: views, forKeys: controllerKeys)
}
else{
var exc = NSException(name: "View Controllers error", reason: "Some objects in viewControllers are not kind of UIViewController!", userInfo: nil)
exc.raise()
}
}
}
}
【问题讨论】:
-
这是为 SLPagingViewSwift 设计的吗?我将 super.init() 更新为 super.init(nibName: nil, bundle: nil)