使用Swift和Firebase中的Protocol从UITableview传递数据

时间:2017-10-28 19:24:08

标签: swift firebase swift3 firebase-realtime-database

我有一个名为PostsTableView的tableview,其中包含一个名为"评论"的UIButton的用户帖子列表。当用户单击Comment时,我希望它重定向到CommentViewController,它包含帖子周围的所有信息,例如postText和撰写帖子的用户。

以下代码的片段。

PostsTableView

extension PostsTableViewController: PostsTableViewCellDelegate {

  func commentTapped(postInfo: String) {

  //How do I pass postInfo along to CommentViewController

  }

PostsTableViewCell

protocol TableViewCellDelegate {

  func commentTapped(postInfo: String)

}

class PostsTableViewCell: UITableViewCell {

@IBOutlet weak var postTextLabel: UILabel!
@IBOutlet weak var postUserLabel: UILabel!

var postItem: Post!
var delegate: TableViewCellDelegate?

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

@IBAction func commentAction(_ sender: Any) {

delegate?.commentTapped(postInfo: postItem.postText)

}
}

2 个答案:

答案 0 :(得分:0)

假设您正在使用segues,您将致电.performSegue(withIdentifier: "mySegueIdentifier", sender: self)

您可以先将postInfo添加到PostsTableViewController

,然后存储var selectedPostInfo: String?
commentTapped(postInfo: String)

然后在func commentTapped(postInfo: String) { selectedPostInfo = postInfo performSegue(withIdentifier: "mySegueIdentifier") }

中设置它
controller.prepare(for: UIStoryboardSegue, sender: Any?)

现在覆盖CommentViewController并设置override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let controller = segue.destination as? CommentViewController { controller.postInfo = selectedPostInfo } } 上的值:

{{1}}

答案 1 :(得分:0)

你可以做这样的事情

1)首先重构委托方法以将post对象作为参数而不仅仅是一个String(这有助于提供更好的用户体验,因为此时不需要获取本地已经可用的数据)。像这样的东西

func commentTapped(postObject: Post) { // I am assuming your Post model has got all the info required by the CommentsViewController
  }

2)现在在CommentsViewController中创建一个属性,让我们说post,你可以初始化为下面的代码

func commentTapped(postObject: Post) {
 let commentVC = CommentsViewController.initWithNib... // Initialise the Comments ViewController
 commentVC.post = postObject // Assign the post object here
 show(commentVC) // Present here the commentVC as per your requirement of Modal or Push
}