Je suppose que vous avez initialisé snackbar
à l'intérieur d'un class func
ou quelque chose comme ça. De cet endroit self
représente votre classe DetailsInfoViewController
tant que vous avez besoin de l'objet de cette classe. Si vous initialisez cet objet avant snackbar
, vous pouvez écrire comme ceci:
let controller: DetailsInfoViewController = ...
let snackbar = TTGSnackbar(message: "Attendance Update !", duration: .long, actionText: "SEND") { [weak controller] (snackbar) in
controller?.uncheck()
print("snack bar Action")
}
Si cela ne vous aide pas, s'il vous plaît afficher le code de fonction où vous créez snackbar
.
UPD: Avec des changements minimes de votre code la solution suivante devrait fonctionner:
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() {}
}
Vous trouvé la situation très délicate quand nécessite votre classe self
dans la fermeture comme initialisées mais cette snackbar
Initialise variables avant d'avoir la variable self
prête à l'emploi. Cela signifie que nous devons initialiser snackbar
après self
en utilisant lazy var
.
Mais I fortement vous suggère de ne pas écrire de code comme vous l'avez écrit. Le TTHSnackbar author's example est conçu pour être placé dans une fonction lorsque ce casse-croûte doit vraiment être montré. Par exemple:
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()
}
}
Lorsqu'elle s'affiche sur la vue, elle sera conservée par cette vue.
UPD # 2: Pour afficher une seule Friterie à un moment où vous pourriez écrire comme ceci:
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()
}
}
Quelle est l'erreur que vous obtenez? –
il suffit d'ajouter self.uncheck() à l'intérieur du bloc car c'est un bloc –
J'ai ajouté self.uncheck() dans le bloc latéral en obtenant cette erreur (Valeur de type '(NSObject) ->() -> DetailsInfoViewController' n'a aucun membre 'décocher) ' – naga