Swift 中的条形按钮项启用问题
Posted
技术标签:
【中文标题】Swift 中的条形按钮项启用问题【英文标题】:Bar button Item enabling problems in Swift 【发布时间】:2015-06-05 10:56:54 【问题描述】:全部,
在 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
【问题讨论】:
似乎很合理,我该如何解决?该按钮在界面生成器中设置。我在视图控制器上有一个容器(里面有一个表格视图),当在单元格上按下一个按钮时,它应该调用这个计算机变量(它确实如此)。 您可以先在设置计算属性的位置显示您的代码并显示视图控制器。 我认为按钮来自故事板,检查按钮连接(委托)故事板到 ViewController 并在代码 BarButtonPAY!.enabled = true 中使用它 仍然,在显示视图控制器的位置添加代码并访问PayButton
属性。
【参考方案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()
BarButtonPAY 中创建对象类型的 ViewController 后,也没有初始化(直到 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
【讨论】:
我把init里面的var去掉了直接加-1还是不行 其他地方设置在哪里? 也许你是在 RootViewController 的 prepareForSegue 中设置的? 那么您确定 BarButtonPAY 已从情节提要正确连接(检查参考插座)吗?当您设置 PayButton 一个值(在您的代码中的任何位置)时,请您给我看代码 让我们continue this discussion in chat。【参考方案2】:当您这样做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
【讨论】:
这不起作用,因为我用来向 PayButton 添加值的类没有 ViewController 委托,因此 'presentViewController' 无效。 我同意对象已超出视图层次结构 - 我只需要以对象不会消失的方式连接到视图控制器。以上是关于Swift 中的条形按钮项启用问题的主要内容,如果未能解决你的问题,请参考以下文章