Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 访问tableView中的项目按钮didSelectRowAtIndexPath swift_Ios_Swift_Uitableview - Fatal编程技术网

Ios 访问tableView中的项目按钮didSelectRowAtIndexPath swift

Ios 访问tableView中的项目按钮didSelectRowAtIndexPath swift,ios,swift,uitableview,Ios,Swift,Uitableview,我在viewDidLoad中创建了两个UIBarButtonim按钮,将它们分组在导航栏的右侧,这样当满足某些条件时,一个将被启用,另一个将被禁用,反之亦然 除了识别条件并根据条件启用和禁用外,按钮工作正常 override func viewDidLoad() { super.viewDidLoad() var btnDone: UIBarButtonItem = UIBarButtonItem( barButtonSystemItem: .Done,

我在viewDidLoad中创建了两个UIBarButtonim按钮,将它们分组在导航栏的右侧,这样当满足某些条件时,一个将被启用,另一个将被禁用,反之亦然

除了识别条件并根据条件启用和禁用外,按钮工作正常

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

您正在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声明为具有延迟初始化的类变量,这意味着它将根据需要创建,使我能够访问所需的按钮(在didSelectRowAtIndexPath内)但现在,当我运行它并转到该视图时,我得到了一个错误致命错误:在展开可选值时意外发现nil错误位于(btnAdd!=UIBarButtonItem(barButtonSystemItem:.Add,target:self,action:“btnAddCustomFunction”)在ViewDidLoad中,当您调用btnDone(btnDone?.enabled=true)时,添加一个?而不是一个!@tew我只是使用惰性初始化创建它,这实际上是您尝试执行的操作的最佳选择。祝您的应用好运!现在错误发生在var按钮=[btnDone,btnAdd]我尝试了你的建议,但它仍然发生。我尝试仅使用self.navigatioBarItem.rightbuttoneim=btnDone使用其中一个按钮like@Icaro.我试着避开第一行,直接使用self.navigationBar.rightbuttoniems=[btnDone,btnAdd]使用“!”和“?”的组合以及相同的错误。似乎它与“RightBarButtonims”捆绑在一起@Icaro建议的惰性初始化有效。谢谢。