gpt4 book ai didi

ios - Swift 将 TableView 单元格中的数据传递给 View Controller

转载 作者:行者123 更新时间:2023-11-29 01:52:34 25 4
gpt4 key购买 nike

我似乎遇到了一个问题,不知道我哪里出错了。我试图通过按钮将用户的帖子发送到另一个 View Controller ,但我的应用程序一直崩溃。下面是 tableview 单元格的代码和 segue 的准备。我对应用程序开发领域还是个新手。所以如果我的代码有点乱,我很抱歉。我也使用 Parse 作为我的后端。我不知道这是否有所作为。

先谢谢你!

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TimelineTableViewCell

let userPost: PFObject = self.userObjects.objectAtIndex(indexPath.row) as! PFObject

cell.backgroundColor = UIColor.darkGrayColor().colorWithAlphaComponent(0.2)
cell.layer.borderColor = UIColor.lightGrayColor().CGColor
cell.layer.borderWidth = 0.5
cell.reportPost.tag = indexPath.row
cell.reportPost.addTarget(self, action: "buttonAction", forControlEvents: .TouchUpInside)

// Display Users Post's
var userText = userPost["text"] as? String
cell.TextLabel!.text = userText

// Display Date and Time

var Date: NSDateFormatter = NSDateFormatter()
Date.dateFormat = "MM-dd HH:mm"
cell.dateLabel.text = Date.stringFromDate(userPost.createdAt!)

// Display username

var findUser:PFQuery = PFUser.query()!
let Id = userPost.objectForKey("username")?.objectId as NSString!
findUser.whereKey("objectId", equalTo: Id)
findUser.findObjectsInBackgroundWithBlock{
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil{
var user:PFUser = (objects as NSArray!).lastObject as! PFUser

cell.userLabel.text = user.username

// Getting User's Profile Image

var initialThumbnail = UIImage(named: "PAHS_Logo")
cell.userImage.image = initialThumbnail

if let PhotoFile = user["ProfileImage"] as? PFFile {
PhotoFile.getDataInBackgroundWithBlock{
(ImageData:NSData?, error:NSError?)->Void in
if error == nil{
let Image:UIImage = UIImage(data: ImageData!)!
cell.userImage.image = Image
}else{
cell.userImage.image = initialThumbnail
}
}
}
}
}

return cell
}


func buttonAction(sender: UIButton!){
let titleString = self.userObjects.objectAtIndex(sender.tag) as? String
let firstActivityItem = "\(titleString)"
let activityViewController: UIActivityViewController = UIActivityViewController(activityItems: [firstActivityItem], applicationActivities: nil)
self.presentViewController(activityViewController, animated: true, completion: nil)
}

var valueToPass: String!

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let indexPath = tableView.indexPathForSelectedRow();
let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!;
valueToPass = currentCell.textLabel?.text
performSegueWithIdentifier("reportPost", sender: self)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "reportPost")
{
var viewController: reportViewController = segue.destinationViewController as! reportViewController
let indexPath = self.tableView!.indexPathsForSelectedRows();
let titleString = userObjects.objectAtIndex(indexPath!.count) as! String
viewController.titleString = titleString
viewController.titleLabel.text = valueToPass //fatal error: unexpectedly found nil while unwrapping an Optional value
self.presentViewController(viewController, animated: true, completion: nil)
}
}

最佳答案

您可以将 performSegueWithIdentifier("reportPost", sender: self) 更改为 performSegueWithIdentifier("reportPost", sender: indexPath) 然后,在 prepareForSegue() 中发送者将是indexPath。您可以将 prepareForSegue() 更改为:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "reportPost")
{
var viewController: reportViewController = segue.destinationViewController as! reportViewController
let indexPath = sender as! NSIndexPath
let titleString = userObjects[indexPath.row] as! String // I am assuming userObjects is the object containing the data you want
viewController.titleString = titleString
let cell = tableView.cellForRowAtIndexPath(indexPath) as! UITableViewCell
let valueToPass = cell.textLabel?.text
viewController.titleLabel.text = valueToPass
self.presentViewController(viewController, animated: true, completion: nil)
}
}

如果你这样做,你可以摆脱 tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 上面的 var valueToPass: String!

关于ios - Swift 将 TableView 单元格中的数据传递给 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31253211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com