J'ai une vue de contrôleur de navigation, avec un contrôleur intégré de collection. J'ai un bouton de la barre à droite est ajouté par programme, avec une image ajoutée comme suit:Swift 3 - Bouton Reload NavigationController Image
self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "greyCircle").withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector (handleGrayCircleButton))
Je voudrais un utilisateur qui clique sur ce bouton, pour être en mesure de changer l'image du gris à l'argent. Je le gestionnaire de bouton mis en place pour passer de gris à l'argent à chaque pression:
self.navigationItem.rightBarButtonItem?.image = UIImage(named: "greyCircle")
Cependant, l'image change seulement brièvement avant de basculer en arrière. J'ai essayé d'enregistrer la couleur de l'image en tant que variable 'flag', c'est-à-dire si elle est actuellement grise, passer à l'argent, pour que le changement persiste, cependant, l'image se réinitialise continuellement avec viewDidLoad ou viewWillAppear).
Y at-il un moyen de rafraîchir/recharger la barre d'onglets navigationController après chaque clic et de la faire durer, ainsi que les images des boutons de la barre?
#EDIT: La suite est un gestionnaire de boutons complet.
func handleFavoritePress(){
print("Favorites pressed")
if(!returnTrueIfInFavorites(objectName: readString(object: self.patientRecord!, key: "name"), objectType: LIST_CoreDataBaseObjects.Patients)){
// Add to favorites
Favorites_Names.append(readString(object: self.patientRecord!, key: "name"))
Favorites_Types.append(LIST_CoreDataBaseObjects.Patients)
// Let user know
let patientName = readString(object: self.patientRecord!, key: "name")
let alertController = UIAlertController(title: "Alert!", message: "\(patientName) has been added to your favorites.", preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alertController.addAction(defaultAction)
var rootViewController = UIApplication.shared.keyWindow?.rootViewController
if let navigationController = rootViewController as? UINavigationController {
rootViewController = navigationController.viewControllers.first
}
if let tabBarController = rootViewController as? UITabBarController {
rootViewController = tabBarController.selectedViewController
}
rootViewController?.present(alertController, animated: true, completion: nil)
self.navigationItem.rightBarButtonItem?.image = UIImage(named: "savedFavorite_1")
}else{
self.navigationItem.rightBarButtonItem?.image = UIImage(named: "favorite_2")
deleteFromFavorites(objectName: readString(object: patientRecord!, key: "name"), objectType: LIST_CoreDataBaseObjects.Patients)
}
for favorite in Favorites_Names{
print("Favorites are currently: \(patient)")
}
}
et d'autres fonctions:
override func viewWillAppear(_ animated: Bool) {
collectionView?.backgroundView = setBackgroundImage(imageName: "whiteBackground")
navigationItem.title = "Patient"
if(returnTrueIfInFavorites(objectName: readString(object: patientRecord!, key: "name"), objectType: LIST_CoreDataBaseObjects.Patients)){
setupNavBarButtonsIsFavorited()
}else{
setupNavBarButtonsNotFavorited()
}
}
func setupNavBarButtonsNotFavorited(){
self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "favorite_2").withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector (handleFavoritePress))
}
func setupNavBarButtonsIsFavorited(){
self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "savedFavorite_1").withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector (handleFavoritePress))
}
Vous voulez dire que, après avoir mis à jour l'image, il se remettra, disons, en quelques secondes? –
Oui, il passe à la nouvelle image, brièvement puis à droite. Si je change d'onglet, puis de retour, il s'affiche correctement, mais pas encore dans le même onglet de collectionviewcontroller – Jeeves
Pouvez-vous nous montrer le code de votre gestionnaire de clic complet, s'il vous plaît? –