Display user's post on a new ViewController

时间:2015-09-01 22:10:03

标签: ios iphone swift cocoa-touch parse-platform

I'm working on an app that let's users post, like and comment, so as part of my comment implementation, I'm trying to display the user's post, so you are able to comment on it. I am using a UITableView that is the main timeline and it displays all of the posts users have made, so what I'm trying to do is that when a user clicks on a cell, it displays the post of that cell so you are able to comment on it, but I'm having trouble displaying it.

This is the code that I have for that implementation so far, so what am I missing? Is there anything else that I can do to be able to display the selected post in a viewController after the user clicks on the cell?

import UIKit
import Parse

class DetailViewContoller: UIViewController, UITableViewDelegate, UITextViewDelegate {

@IBOutlet weak var usernameLabel: UILabel!
@IBOutlet weak var postLabel: UILabel!
@IBOutlet weak var commentTableView: UITableView!

var post: PFObject?
var commentView: UITextView?
var footerView: UIView?
var contentHeight: CGFloat = 0

var comments: [String]?
let FOOTERHEIGHT : CGFloat = 50;

override func viewDidLoad() {
    super.viewDidLoad()

    commentTableView.delegate = self

    /* Setup the keyboard notifications */
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyBoardWillShow:", name: UIKeyboardWillShowNotification, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyBoardWillHide:", name: UIKeyboardWillHideNotification, object: nil)

    if(post?.objectForKey("comments") != nil) {
        comments = post?.objectForKey("comments") as? [String]
    }

    println(post)
    println(post?.objectForKey("content"))
    self.postLabel.text = post?.objectForKey("content") as? String
}


func keyBoardWillShow(notification: NSNotification) {
    var info:NSDictionary = notification.userInfo!
    var keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()

    var keyboardHeight:CGFloat =  keyboardSize.height - 40


    var animationDuration:CGFloat = info[UIKeyboardAnimationDurationUserInfoKey] as! CGFloat

    var contentInsets: UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardHeight, 0.0);
    self.commentTableView.contentInset = contentInsets
    self.commentTableView.scrollIndicatorInsets = contentInsets

}

func keyBoardWillHide(notification: NSNotification) {

    self.commentTableView.contentInset = UIEdgeInsetsZero
    self.commentTableView.scrollIndicatorInsets = UIEdgeInsetsZero
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if let count = comments?.count {
        return count
    }
    return 0
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = commentTableView.dequeueReusableCellWithIdentifier("commentCell", forIndexPath: indexPath) as! CommentTableViewCell
    cell.commentLabel?.text = comments![indexPath.row]
    return cell
}

func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    if self.footerView != nil {
        return self.footerView!.bounds.height
    }
    return FOOTERHEIGHT
}

func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    footerView = UIView(frame: CGRect(x: 0, y: 0, width: commentTableView.bounds.width, height: FOOTERHEIGHT))
    footerView?.backgroundColor = UIColor(red: 243.0/255, green: 243.0/255, blue: 243.0/255, alpha: 1)
    commentView = UITextView(frame: CGRect(x: 10, y: 5, width: commentTableView.bounds.width - 80 , height: 40))
    commentView?.backgroundColor = UIColor.whiteColor()
    commentView?.textContainerInset = UIEdgeInsetsMake(5, 5, 5, 5)
    commentView?.layer.cornerRadius = 2
    commentView?.scrollsToTop = false

    footerView?.addSubview(commentView!)
    let button = UIButton(frame: CGRect(x: commentTableView.bounds.width - 65, y: 10, width: 60 , height: 30))
    button.setTitle("Reply", forState: UIControlState.Normal)
    button.backgroundColor = UIColor(red:  0/0.0, green: 179/255.0, blue: 204/255.0, alpha: 100.0/100.0)
    button.layer.cornerRadius = 5
    button.addTarget(self, action: "reply", forControlEvents: UIControlEvents.TouchUpInside)
    footerView?.addSubview(button)
    commentView?.delegate = self
    return footerView
}


//Hide keyboard after touching background
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    self.view.endEditing(true)
}

//remaining characters
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool{

    if (text == "\n") {
        textView.resignFirstResponder()
    }

    return true
}

func reply() {
    post?.addObject(commentView!.text, forKey: "comments")
    post?.saveInBackground()
    if let tmpText = commentView?.text {
        comments?.append(tmpText)
    }
    commentView?.text = ""
    println(comments?.count)
    self.commentView?.resignFirstResponder()
    self.commentTableView.reloadData()
}
}

1 个答案:

答案 0 :(得分:0)

当您点击表格单元格时,我在代码中看不到任何实际触发的内容。我修改代码的方式是:

  1. 实施override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {}
  2. 使用indexpath确定要显示
  3. 详细信息的对象
  4. 为细节创建一个新的viewcontroller,将对象传递给它,然后将其推送
  5. 更优雅(但在某些方面更复杂)的方式是实现PFQueryTableViewController然后使用函数objectAtIndexPath()来检索相关对象并显示细节