我在viewDidLoad中创建了两个UIBarButtonItem按钮,这些按钮被分组在导航栏的右侧,这样当满足某个条件时,一个将被启用而另一个被禁用,反之亦然。
按钮工作正常,除了识别条件并根据条件启用和禁用。
override func viewDidLoad() {
super.viewDidLoad()
var btnDone: UIBarButtonItem = UIBarButtonItem(
barButtonSystemItem: .Done,
target: self,
action: "btnDoneFunction")
btnDone.style = UIBarButtonItemStyle.Done
let btnAdd: UIBarButtonItem = UIBarButtonItem(
barButtonSystemItem: .Add,
target: self,
action: "btnAddFunction")
var buttons = [btnAdd, btnDone]
self.navigationItem.rightBarButtonItems = buttons
if checked.count >= 1 {
btnDone.enabled = true
btnAdd.enabled = false
} else {
btnDone.enabled = false
btnAdd.enabled = true
}
}
checked是一个数组,用于保存didSelectRowAtIndexPath中表中已检查行的行数。
我尝试移动条件部分:
if checked.count >= 1 {
btnDone.enabled = true
btnAdd.enabled = false
} else {
btnDone.enabled = false
btnAdd.enabled = true
}
在didSelectRowAtIndexPath中,但我无法访问那里的按钮。
有什么办法可以实现吗?我只想检查表中是否有任何行检查并禁用“添加”按钮并启用“完成”按钮。如果没有选中行,则相反。
这是在UITableViewController类中。
答案 0 :(得分:0)
您正在viewDidLoad中创建按钮,因此变量的范围仅适用于该函数,您需要在类中声明它。
class myClass{
lazy var btnDone:UIBarButtonItem = {
var done: UIBarButtonItem = UIBarButtonItem(
barButtonSystemItem: .Done,
target: self,
action: "btnDoneFunction")
return done
}()
func anotherFunc(){
if checked.count >= 1 {
btnDone?.enabled = true
} else {
btnDone?.enabled = false
}
}
}
我在上面创建了一个通用示例,它将btnDone声明为具有延迟初始化的类变量,这意味着它将根据需要进行创建