我在一个应用程序上工作,让用户发布,喜欢和评论,所以作为我的评论实现的一部分,我试图显示用户的帖子,所以你可以评论它。我使用的是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()
}
}
我在你的代码中没有看到当你点击一个表格单元格时触发的任何东西。我修改代码的方法是:
- 实施
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {}
- 使用
indexpath
来确定要为 显示详细信息的对象 - 为细节创建一个新的视图控制器,将对象传递给它,然后推送它
一种更优雅(但在某些方面更复杂)的做事方式是实现PFQueryTableViewController
,然后使用objectAtIndexPath()
函数检索相关对象并显示详细信息