gpt4 book ai didi

ios - 在 Swift 中使用自定义函数调用的 snackbar

转载 作者:行者123 更新时间:2023-11-28 15:27:45 25 4
gpt4 key购买 nike

我在我的应用程序中使用 snackBar,它在我的应用程序中运行良好,但我想从 SnackBar 操作 block 访问自定义函数。

我可以尝试显示它

  • 实例成员“uncheck”不能用于类型“DetailsInfoViewController”,您是否打算改用此类型的值?

这是代码

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()
}

如何访问snack Bar actionBlock里面的自定义函数?

最佳答案

我假设您已经在 class func 或类似的东西中初始化了 snackbar。从这个地方 self 代表你的类 DetailsInfoViewController 而你需要这个类的对象。如果你在 snackbar 之前初始化这个对象,你可以这样写:

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

如果它对您没有帮助,请在您创建 snackbar 的地方发布函数代码。

更新:通过对代码进行最少的更改,以下解决方案应该可以工作:

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() {}

}

当你的类在初始化时需要 self 时,你发现了非常棘手的情况 但是这个 snackbar 变量在我们准备好之前初始化- 使用 self 变量。这意味着我们需要在 self 之后使用 lazy var 初始化 snackbar

但我强烈建议您不要像编写代码那样编写代码。 TTHSnackbar author's example设计用于在真正需要显示此 snackbar 时放置在功能中。例如:

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()
}

}

当它显示在 View 上时,它将被该 View 保留。

更新#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()
}

}

关于ios - 在 Swift 中使用自定义函数调用的 snackbar ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45012358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com