首頁  >  問答  >  主體

ios - 关于收藏 点赞收藏按钮应该如何判断

右上角的爱心是收藏按钮,白色是未收藏,红色是收藏.
需求是: 用户可以任务点击收藏和取消收藏,如果点了收藏,下次再来到这个页面要显示已收藏状态.
但是我的代码只能做到点击收藏和取消收藏,下次再来到这个页面又变成未收藏状态了(应该是重新判断了代码,所以我想应该要记录下用户的点击状态,如果用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];

    }
}

谢谢~

PHP中文网PHP中文网2741 天前476

全部回覆(4)我來回復

  • PHP中文网

    PHP中文网2017-04-18 09:15:51

    這個一般是由後台回傳資料告訴你這個商品到底有沒被收藏的 用UserDefault的話你可以直接去吧商品id作為Key,Value值為一個BOOL值記錄他有沒被收藏

        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"商品id"];
        [[NSUserDefaults standardUserDefaults] synchronize];

    然後在viewWillAppear裡面先去取值

    [[NSUserDefaults standardUserDefaults] boolForKey:@"商品id"];

    回覆
    0
  • 怪我咯

    怪我咯2017-04-18 09:15:51

    我覺得這種東西最好不要用 userDefault 存。 userDefault 是把整個 dictionary 存到 plist 檔案裡的。隨著商品越來越多,這個 dictionary 的鍵值也會越來越多,到最後只是需要載入一個商品的收藏狀態,要讀一個上萬行的文件,不得慢死。

    這個問題我通常是這麼處理的。在用戶點擊收藏按鈕的時候做兩件事:

    1. 發收藏/取消收藏的請求給後台

    2. 更新 model,即時更新顯示狀態

    第 2 條用手動還是用 ReactCocoa 都可以。然後我猜你的問題是,清單頁裡的 model 還是沒更新的狀態,所以回到清單頁、再從清單頁點進來之後,還顯示的是沒更新的狀態。而我一般的做法是,詳情頁裡的 model 跟列表頁的 model 用的是同一個物件。幾個關鍵的程式碼:

    從列表頁進詳情頁:

    detailViewController.someModel = self.someModelArray[someIndex];
    [UINavigationController pushViewController:detailViewController animated:...];

    注意此處拷貝的是一個物件類型。詳情頁的 model 與列表頁數組裡的 model 是不同的指針指向同一個對象,同一塊內存,所以在詳情頁裡對 model 的更新能讓列表頁的 model 同時更新。 如果只傳一個基本類型,例如像你描述裡寫的isCollection,就起不到這個作用了。

    在詳情頁收藏/取消收藏:

    self.someModel.favorited = !self.someModel.favorited; // 更新 model
    [self.someView configureWithData:self.someModel]; // 更新界面
    
    [SomeModelStore requestFavoriteUnFavorite:self.someModel.favorited ofSomeModel:self.someModel]; // 发送网络请求

    而這樣回到列表頁,列表頁的 model 也更新了。如果列表頁也顯示愛心標誌的話,可以簡單加一句:

    [self.tableView reloadData];

    就可以更新清單頁的愛心標誌了。

    回覆
    0
  • PHPz

    PHPz2017-04-18 09:15:51

    這個收藏你應該是對伺服器資料做出修改,而不是簡單的本地修改資料

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:15:51

    我最近也在做類似的,按讚可以用ajax後台回傳記錄到資料庫的資料麼?這種方式處理怎麼樣

    回覆
    0
  • 取消回覆