2017-10-28 230 views
-1

我有一个名为PostsTableView的tableview,它有一个名为“Comment”的UIButton的用户帖子列表。当用户点击评论时,我希望它重定向到包含帖子周围所有信息的CommentViewController,例如postText和写帖子的用户。在Swift和Firebase中使用协议在UITableview中传递数据

下面的代码片段。

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) 

} 
} 

回答

0

假设你正在使用塞格斯,你会打电话给.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值:Firstof所有重构

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let controller = segue.destination as? CommentViewController { 
     controller.postInfo = selectedPostInfo 
    } 
} 
0

你可以做这样的事情

1)委托方法将post对象作为参数而不仅仅是String(这有助于提供更好的用户体验,因为不需要f刻蚀当时已有的本地数据)。这样

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

2什么的)现在创建CommentsViewController属性假设后,你我可以初始化如下面的代码

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 
}