代码之家  ›  专栏  ›  技术社区  ›  naga

Swift中带有自定义函数调用的snackbar

  •  -1
  • naga  · 技术社区  · 7 年前

    我在应用程序中使用snackBar,它在我的应用程序中运行良好,但我想从snackBar动作块访问自定义功能。

    我可以试试看

    这是代码

    let snackbar = TTGSnackbar(message: "Attendance Update !",
                               duration: .long,
                               actionText: "SEND",
    
                               actionBlock: {
                                    (snackbar) in
    
                                uncheck()
    
                                print("snack bar Action")
    
    })
    
    func uncheck()
    {
    
        print("snackbar uncheck function")
        snackbarCount -= 1
        checkSnackBar()
    }
    

    我如何访问快餐店actionBlock中的自定义功能?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Krin-San    7 年前

    我假设你已经初始化了 snackbar a内部 class func self 代表您的班级 DetailsInfoViewController 快餐店

    let controller: DetailsInfoViewController = ...
    let snackbar = TTGSnackbar(message: "Attendance Update !", duration: .long, actionText: "SEND") { [weak controller] (snackbar) in
        controller?.uncheck()
        print("snack bar Action")
    }
    

    如果这对你没有帮助,请在你创建的地方张贴函数代码 快餐店

    UPD: 在代码更改最少的情况下,以下解决方案应该可以工作:

    class DetailsInfoViewController: UIViewController {
    
        var snackbarCount = 0
    
        lazy var snackbar = TTGSnackbar(message: "Attendance Update !", duration: .long, actionText: "SEND") { (snackbar) in
            self.uncheck()
            print("snack bar Action")
        }
    
        func uncheck() {
            print("snackbar uncheck function")
            snackbarCount -= 1
            checkSnackBar()
        }
    
        func checkSnackBar() {}
    
    }
    

    当你的班级需要时,你发现了非常棘手的情况 但是 变量在我们准备使用之前初始化 自己 快餐店 自己 lazy var

    但我 强烈地 TTHSnackbar author's example

    class DetailsInfoViewController: UIViewController {
    
        @IBAction func showSnackbarButtonTapped(_ sender: UIButton) {
            let snackbar = TTGSnackbar(message: "TTGSnackBar !", duration: .middle, actionText: "Action!") { (snackbar) in
                self.uncheck()
                print("snack bar Action")
            }
            snackbar.show()
        }
    
    }
    

    当它显示在视图上时,它将被此视图保留。

    UPD#2 要一次只显示一个Snackbar,您可以这样写:

    class DetailsInfoViewController: UIViewController {
    
        private weak var currentSnackbar: TTGSnackbar?
    
        @IBAction func showSnackbarButtonTapped(_ sender: UIButton) {
            if let snackbar = currentSnackbar {
                snackbar.dismiss()
                currentSnackbar = nil
            }
    
            let snackbar = TTGSnackbar(message: "TTGSnackBar !", duration: .middle, actionText: "Action!") { (snackbar) in
                self.uncheck()
                print("snack bar Action")
            }
    
            currentSnackbar = snackbar
            snackbar.show()
        }
    
    }