右上角的爱心是收藏按钮,白色是未收藏,红色是收藏.
需求是: 用户可以任务点击收藏和取消收藏,如果点了收藏,下次再来到这个页面要显示已收藏状态.
但是我的代码只能做到点击收藏和取消收藏,下次再来到这个页面又变成未收藏状态了(应该是重新判断了代码,所以我想应该要记录下用户的点击状态,如果用nsuserdefaults代码应该如何写?).
以下是我的代码:
-(void)rightBtnClick:(UIButton *)ban {
isCollection = !isCollection;
if (isCollection) {
[self.rightBtn setImage: [UIImage imageNamed: @"collection"] forState: UIControlStateNormal];
} else {
[self.rightBtn setImage: [UIImage imageNamed: @"notCollection"] forState: UIControlStateNormal];
}
}
谢谢~
這個一般是由後台回傳資料告訴你這個商品到底有沒被收藏的 用UserDefault的話你可以直接去吧商品id作為Key,Value值為一個BOOL值記錄他有沒被收藏
然後在viewWillAppear裡面先去取值
我覺得這種東西最好不要用 userDefault 存。 userDefault 是把整個 dictionary 存到 plist 檔案裡的。隨著商品越來越多,這個 dictionary 的鍵值也會越來越多,到最後只是需要載入一個商品的收藏狀態,要讀一個上萬行的文件,不得慢死。
這個問題我通常是這麼處理的。在用戶點擊收藏按鈕的時候做兩件事:
發收藏/取消收藏的請求給後台
更新 model,即時更新顯示狀態
第 2 條用手動還是用 ReactCocoa 都可以。然後我猜你的問題是,清單頁裡的 model 還是沒更新的狀態,所以回到清單頁、再從清單頁點進來之後,還顯示的是沒更新的狀態。而我一般的做法是,詳情頁裡的 model 跟列表頁的 model 用的是同一個物件。幾個關鍵的程式碼:
從列表頁進詳情頁:
注意此處拷貝的是一個物件類型。詳情頁的 model 與列表頁數組裡的 model 是不同的指針指向同一個對象,同一塊內存,所以在詳情頁裡對 model 的更新能讓列表頁的 model 同時更新。 如果只傳一個基本類型,例如像你描述裡寫的
isCollection
,就起不到這個作用了。在詳情頁收藏/取消收藏:
而這樣回到列表頁,列表頁的 model 也更新了。如果列表頁也顯示愛心標誌的話,可以簡單加一句:
就可以更新清單頁的愛心標誌了。
這個收藏你應該是對伺服器資料做出修改,而不是簡單的本地修改資料
我最近也在做類似的,按讚可以用ajax後台回傳記錄到資料庫的資料麼?這種方式處理怎麼樣