【问题标题】:access UIBarBarItem button inside tableView didSelectRowAtIndexPath swift访问tableView中的UIBarBarItem按钮 didSelectRowAtIndexPath swift
【发布时间】:2015-06-10 00:55:47
【问题描述】:

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

【问题讨论】:

    标签: ios swift uitableview


    【解决方案1】:

    您正在 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错误出现在 viewDidLoad 内的 (btnAdd! = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "btnAddCustomFunction )
    • 添加一个 ?而是一个!当你调用 btnDone (btnDone?.enabled = true)
    • @tew 我只是使用延迟初始化创建它,这实际上是您尝试做的最佳选择。祝你的应用好运!
    • 现在错误发生在 var buttons = [btnDone, btnAdd] 我试过你的建议,它仍然发生。我尝试使用仅使用 self.navigatioBarItem.rightBarButtonItem = btnDone like@Icaro 的按钮之一。一切正常。我尝试避免使用第一行并直接使用 self.navigationBar.rightBarButtonItems = [btnDone, btnAdd] 和 '!' 的两种组合和 '?'和同样的错误。似乎它与“rightBarButtonItems”相关联
    • @Icaro 建议的延迟初始化有效。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多