我正在尝试从TableView传递数据,因此当按下一个单元格时,该单元格上的数据将被传输到viewController并在那里显示,但我似乎无法让它工作。我试过这些帖子:
swift segue not passing data from tableview
Passing data from tableView to ViewController in Swift
Pass data through unwind segue
但要么我得到一个崩溃应用程序的错误,要么它没有显示任何内容。我想要做的是让用户评论另一个用户发布的帖子,所以我试图从帖子中获取信息以详细显示它,但那就是我遇到麻烦的地方。这是我用来从表视图传递数据的函数:
func objectAtIndexPath(indexPath: NSIndexPath) -> PFObject {
return self.timelineData[indexPath.row] as! PFObject
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if(segue.identifier == "lookPosts"){
let VC = segue.destinationViewController as! DetailViewContoller
let indexPath: NSIndexPath! = self.tableView.indexPathForSelectedRow()
VC.post = self.objectAtIndexPath(indexPath!) as PFObject
}
}
这是DetailViewController的类:
import UIKit
import Parse
class DetailViewContoller: UIViewController, UITableViewDelegate, UITextViewDelegate {
@IBOutlet weak var usernameLabel: UILabel!
@IBOutlet weak var postTextView: UITextView!
@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)
//gets the current user username
usernameLabel.text = PFUser.currentUser()!.username as String?
if(post?.objectForKey("comments") != nil) {
comments = post?.objectForKey("comments") as? [String]
}
println(post)
println(post?.objectForKey("content"))
//self.postTextView.text = post?.objectForKey("content") as? String
}
override func viewWillAppear(animated: Bool) {
super.viewDidAppear(animated)
self.postTextView.text = post?.objectForKey("content") as? String
println(postTextView.text)
}
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()
}
}
所以我的问题是:是否有另一种传递数据的方法?或者我做错了数据没有通过?
答案 0 :(得分:0)
以下是实现这一目标的一种方法:
如果您的数据不是很大,那么您可以使用NSUserDefaults
。
首先将数据存储到内存中:
NSUserDefaults.standardUserDefaults().setObject(yourObject, forKey: "yourKey")
从另一个viewController中的内存中读取数据:
let yourObject = NSUserDefaults.standardUserDefaults().objectForKey("yourKey") as! PFObject
希望它有所帮助。