访问tableView didSelectRowAtIndexPath swift中的UIBarBarItem按钮

时间:2015-06-10 00:55:48

标签: ios swift uitableview

我在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类中。

1 个答案:

答案 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声明为具有延迟初始化的类变量,这意味着它将根据需要进行创建