2015-12-04 5 views
2

Я пытаюсь реализовать подобную/непохожую функцию в моем приложении iOS с помощью Swift 2.0, Storyboard и Parse, где пользователям могут нравиться/отличные от сообщений, созданные другими пользователями или самими собой - так же, как Instagram, Facebook и других социальных приложений.Реализация подобных и непохожих функциональных возможностей в Swift с использованием Parse

У меня есть кнопка, подключенная к раскадровке к IBOutlet под названием likeButton и IBAction, называемая likeButtonTapped.

Я уверен, что метод cellForRowAtIndexPath также участвует в правильной реализации этой функции.

Я думаю, что у меня есть правильное представление о том, что должно произойти в комментариях моего кода ниже, однако я не знаю, как проверить, понравится ли какая-либо должность или нет. Как проверить, понравилось ли сообщение или нет, чтобы я мог переключаться с изображением likeButton, увеличивать/уменьшать значение likeCount и добавлять/удалять связь между текущим пользователем и сообщением, которое нравится пользователю.

Кроме того, принимаю ли я подход «правого» (обычного) для стандартной, как/в отличие от функции? Я хотел бы услышать ваши отзывы. Спасибо за ваше время и помощь!

class TimelineFeedViewController: PFQueryTableViewController { 

var userLike = PFUser.currentUser()?.relationForKey("likes") 

@IBAction func likeButtonTapped(sender: UIButton) { 

    // The following code has errors - for example, `object` is an unresolved identifier (it's supposed to be a PFObject that holds a post at a specific indexPath) 
    // Also, I cant access the likeButton for some reason. Only when I do cell.likeButton in `cellForRowAtIndexPath`. 
    // If the button is liked already (it's filled) 
    // Toggle likeButton image to UNfilled version 
    // "if likeButton isLiked == true" below is pseudocode of what I am trying to do 
    if likeButton isLiked == true { 

     let image = UIImage(named: "likeButtonUnfilled") 
     cell.likeButton.setImage (image, forState: UIControlState) 

     // Decrement the likeCount 
     object!.decrementKey("count") 

     // Remove the relation bet user and post 
     self.userLike?.removeObject(object!) 

    } else { 

     // the button is NOT liked already (it's not filled) 
     // toggle the image to the filled version 
     let image = UIImage(named: "likeButton") 
     cell.likeButton.setImage (image, forState: UIControlState) 

     // Increment the likeCount 
     object!.incrementKey("count") 

     // Add the relation bet. user and post 
     self.userLike?.addObject(object!) 
    } 

    object!.saveIngBackground() 
    PFUser.currentUser()?.saveInBackground() 

    self.tableView.reloadData() 

} 

} 
+0

У вас есть кнопка в UITableViewCell ?? –

+0

@SaqibOmer Я реализовал IBOutlets, как, например, Button и т. Д. В отдельном файле класса swift, который подклассы UITableViewCell – dnadri

+0

. Приращение и декремент обычно лучше выполняются в облачном коде. Хранение подобных отношений будет работать нормально. – Wain

ответ

-1

Если у вас есть пользовательские UITableViewCell класс и имеют неправдоподобные данные из синтаксического анализа, чем в вас UITableView метод источника данных

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("skillsCell", forIndexPath: indexPath) as! YOURTableViewCell 
    //Check If item is liked 
    if (isLiked) { 

     //Set image for like on button 
     } 
     else { 
      //Set image for unlike on button 
     } 
    cell.YourButton.tag = indexPath.row // This will assign tag to each button in tableView 

    return cell 
} 

чем в YourViewController добавить UIButton Действие

@IBAction func testButtonAction(sender: UIButton) { 

    print(sender.tag) 

    let cell = testTableView.cellForRowAtIndexPath(NSIndexPath(forRow: sender.tag, inSection: 0)) as! TestTableViewCell 

    if cell.likeButton.titleLabel?.text == "Cell \(sender.tag)" { //Your logic here. Check If button's image has "Liked Image than change Image to UnLiked Image" 
     cell.likeButton.text = "\(sender.tag)" 
    } 
    else { 
     cell.likeButton.text = "Cell \(sender.tag)" 
    } 
} 

Это будет осуществлять Like/Unlike для кнопки в UITableView. Также убедитесь, что вы соответствующим образом обновили свой класс в Parse.

+0

Спасибо Saqib. Я создал класс Like в Parse. См. Обновленный вопрос. Несколько вопросов: 1.) Где находится bool isLiked в 'if (isLiked)'? Я не могу получить доступ к Parse таким образом. 2.) Я не уверен, когда вы говорите «Чем в YourViewController добавляется действие UIButton», если вы имеете в виду в ДРУГОЙ файл. Мои методы IBAction likeButtonTapped и 'cellForRowAtIndexPath' реализованы в том же файле/классе:' class TimelineFeedViewController: PFQueryTableViewController'. 3) 'cell.likeButton.text =" \ (sender.tag) "' дает мне эту ошибку в операторах if и else: «Значение типа« UIButton »не имеет текста участника. – dnadri

+0

3,) (продолжение) Я не пытаюсь изменить _text_ of likeButton, просто _image_ of the likeButton. Я благодарю вас за разъяснение ваших ответов на эти 3 вопроса! – dnadri