我有一個導航控制器視圖,帶有嵌入式collectionview控制器。我有加入編程右欄按鈕,與圖像添加到它如下:Swift 3 - 重新加載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)。
無論如何刷新/重新載入導航控制器標籤欄後,每次點擊並使其持續,連同圖像的酒吧按鈕?
#編輯:以下是完整的按鈕處理程序。
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))
}
你的意思是說,在你更新圖像之後,它會以某種方式重新設置,比如幾秒鐘? –
是的,它會切換到新圖像,然後短暫地返回。如果我切換標籤,然後返回,它會正確顯示,但不會在仍處於同一個collectionview控制器選項卡內 – Jeeves
您能告訴我們您的完整按鈕點擊處理程序的代碼嗎? –