私は、ナビゲーションビューを持ち、コレクションビューコントローラを内蔵しています。Swift 3 - Reload NavigationControllerボタン画像
self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "greyCircle").withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector (handleGrayCircleButton))
私は銀にグレーからイメージを変更できるようにするには、このボタンをクリックするユーザーをしたいと思います次のように画像が追加して、私は右のバーボタンは、プログラムで追加されました。私は、ボタンのハンドラは、各プレスで銀に灰色から切り替えるように設定している:
self.navigationItem.rightBarButtonItem?.image = UIImage(named: "greyCircle")
しかし、画像だけでスイッチバックの前に簡単に変更します。私は画像の色を「フラグ」変数として保存しようとしました。つまり、現在グレーの場合は銀色に変えて変更を持続させますが、イメージはロードされたものに継続的にリセットされますviewDidLoadまたはviewWillAppearを使用して)。
クリックしたあとにnavigationControllerタブバーをリフレッシュ/リロードして、バーボタンの画像とともに保存してください。
#EDIT:以下はフルボタンハンドラです。
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)")
}
}
およびその他の機能:
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))
}
イメージを更新した後、何らかの形で何秒かに戻ってきます。 –
はい、新しい画像に切り替わります。次に、すぐに右に戻ります。私がタブを切り替えた後、戻っても正しく表示されますが、同じcollectionviewcontrollerタブの中には表示されません – Jeeves
フルボタンクリックハンドラのコードを表示できますか? –