全部, 我的ViewController上有一个条形按钮项。我已经设置了一个计算属性来关闭BarButton。我希望能够从另一个类中设置它。
以下是我在视图控制器中的代码:
class ViewController: UIViewController {
var PayButton : Int {
didSet {
navigationItem.leftBarButtonItem = nil
}
}
required init(coder aDecoder: NSCoder)
{
self.PayButton = 0
super.init(coder: aDecoder)
}
当它尝试在视图控制器上创建一个实例时(所以我可以设置PayButton整数)
let test = ViewController()
我收到错误说
在调用
中缺少参数'coder'的参数
有什么想法吗?
答案 0 :(得分:1)
它要求参数'编码器',因为你在required init
中有它。
要使用您的代码,您需要初始化:
let test = ViewController(coder: NSCoder)
有几种方法可以解决这个问题。最简单的方法是删除所需的初始化程序。
import UIKit
class ViewController: UIViewController {
var PayButton : Int = 0 {
didSet {
navigationItem.leftBarButtonItem = nil
}
}
}
然后用
实现let test = ViewController()
test.PayButton = 0
答案 1 :(得分:0)
因为您已在ViewController类中实现了所需的初始化程序。
有两种解决方案
添加默认初始值设定项
init(){ super.init(nibName:nil,bundle:nil) }
删除所需的初始化程序。
类ViewController:UIViewController {
var PayButton : Int {
didSet {
navigationItem.leftBarButtonItem = nil
}
}
init() {
self.PayButton = 0
super.init(nibName: nil, bundle:nil)
}
required init(coder aDecoder: NSCoder)
{
self.PayButton = 0
super.init(coder: aDecoder)
}
答案 2 :(得分:0)
试试这个:
这是必需的初始化程序:
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
这是超级初始化器:
override init(frame: CGRect) {
super.init(frame: frame)
}
这是您的便利初始化程序,您可以在其中传递要创建的视图的大小
convenience init(view: UIView){
self.init(frame: view.frame)
}
这是您的便利初始化程序,其中视图使用预定义的值进行初始化:
convenience init(){
self.init(frame: CGRectZero) //Put you predefined value here
}