我有一个名为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)
}
}
答案 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
}