栏按钮项目在Swift

时间:2015-06-05 10:56:55

标签: ios swift

全部,

在ViewDidLoad中,我设置了:

BarButtonPAY.enabled = false

并且禁用了条形按钮项目并且它不可选择,那很好。

我在View Controller上有一个计算属性,它启用了带有enable = true的按钮。

我收到错误'在可选值中找到nil'我注意到BarButtonItem是可选的。当我把?在变量的末尾,它仍然无法启用。有任何想法吗 ?

class ViewController: UIViewController {

    @IBOutlet weak var BarButtonPAY: UIBarButtonItem!

    var PayButton : Int {
        didSet {
                println("Barracuda")
                    BarButtonPAY?.enabled = true
        }
    }

我现在在视图控制器中设置了不同的计算属性 - 就像这样(从init中删除了var)。

@IBOutlet weak var BarButtonPAY: UIBarButtonItem!

    var PayButton : Int? {
        didSet {
            println("Barracuda")
            BarButtonPAY?.enabled = true
        }
    }


    required init(coder aDecoder: NSCoder) {
      //  self.PayButton = 0
        super.init(coder: aDecoder)
    }

    init() {
       // self.PayButton = 0
        super.init(nibName: nil, bundle: nil)

    }

在tableview单元格上按下按钮时。要选择产品,请将付款按钮突出显示为BarButtonItem:

@IBAction func SelectedButton(sender: UIButton) {


    // Set the colours and then highlight 'Next' on
    sender.backgroundColor = UIColor.blueColor()
    sender.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
    sender.setTitle("Ordered", forState: UIControlState.Normal)

    let test = ViewController()
    test.PayButton = 2

}

2 个答案:

答案 0 :(得分:1)

由于PayButton不是可选属性,我假设您在初始化BarButtonPAY之前在初始化程序中设置其值。尝试将默认值设置为PayButton

var PayButton : Int = -1 {
    didSet {
            println("Barracuda")
                BarButtonPAY?.enabled = true
    }
}

或将其声明为可选的Int

var PayButton : Int? {
    didSet {
            println("Barracuda")
                BarButtonPAY?.enabled = true
    }
}

并在两种情况下在init上设置其值时删除该行

已编辑

即使在let test = ViewController()中创建对象类型的ViewController后,BarButtonPAY也未初始化(在ViewController viewDidLoad方法之前不能使用它)。一种可能的解决方法:在ViewController中创建另一个可选的Integer属性,并将其命名为initialValue。在selectedButton上设置initialValue如下

@IBAction func SelectedButton(sender: UIButton) {


// Set the colours and then highlight 'Next' on
sender.backgroundColor = UIColor.blueColor()
sender.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
sender.setTitle("Ordered", forState: UIControlState.Normal)

let test = ViewController()
test.initialValue = 2

}

然后在ViewController viewDidLoad中将PayButton设置为initialValue

override func viewDidLoad(){

    PayButton = initialValue
}

答案 1 :(得分:0)

执行此操作let test = ViewController()时,您正在创建视图控制器的新实例。这样你的网点就是nil。尝试从故事板访问您的视图控制器:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewControllerWithIdentifier("yourViewController") as! UIViewController
self.presentViewController(viewController, animated: true, completion: nil)

然后访问该属性:

viewController.PayButton = 2