ios - 在新的 ViewController 上显示用户的帖子

标签 ios iphone swift cocoa-touch parse-platform

我正在开发一个应用程序,让用户可以发帖、点赞和评论,因此作为我的评论实现的一部分,我尝试显示用户的帖子,以便您可以对其发表评论。我正在使用 UITableView 作为主时间线,它显示用户所做的所有帖子,所以我想做的是,当用户单击某个单元格时,它会显示该单元格的帖子,以便您能够对其发表评论,但我无法显示它。

这是迄今为止我实现该实现的代码,那么我缺少什么? 在用户单击单元格后,我还能做些什么才能在 viewController 中显示所选的帖子吗?

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. 实现override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {}
  2. 使用indexpath确定要显示详细信息的对象
  3. 为细节创建一个新的 View Controller ,将对象传递给它,然后推送它

一种更优雅(但在某些方面很复杂)的做事方式是实现 PFQueryTableViewController然后使用函数objectAtIndexPath()检索相关对象并显示详细信息

关于ios - 在新的 ViewController 上显示用户的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32341655/

相关文章:

iphone - iPhone、iPhone-retina 和 iPad 上 UITableViewCell 中的默认图标大小是多少?

ios - NSManagedObjectContext 的单例?死板的?依赖注入(inject)?

iphone - 我可以在 iPhone 应用程序中集成 Paypal 来卖票吗

Swift 3 CocoaPod 不通过 lint

ios - 如何使用swift将可编码结构发送到服务器

ios - 如何在 objective-c 中的谷歌地图上显示印度 map

iphone - 如何在 iPhone 上将 NSTimeInterval 分解为年、月、日、小时、分钟和秒?

带分页的 iOS TableView?

swift - AV 播放器无法在容器 View Swift 中工作

ios - 如何在 View Controller 之间正确进行分隔