gpt4 book ai didi

ios - 在另一个 Controller 中调用 viewDidLoad

转载 作者:行者123 更新时间:2023-11-28 18:14:46 25 4
gpt4 key购买 nike

我正在尝试在我的聊天应用程序中实现“转发消息”功能。因此,当我在我的 chatVC 中单击“转发”按钮时,弹出式 VC 会与我 friend 列表中的用户一起出现。

enter image description here

问题是,我可以调用我的chatVC viewDidLoad来刷新用户信息吗? (否则,用户信息将与点击“前进”按钮之前的信息相同。)这是我的代码,其中 delegate 是我的 chatVC:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let friend = friendsList[indexPath.row]
delegate?.friendProfileImage = friend.profileImage
delegate?.friendName = friend.name
delegate?.friendId = friend.id
delegate?.friendIsOnline = friend.isOnline
delegate?.friendLastLogin = friend.lastLogin
delegate?.forwardedMessage = true
delegate?.messages = []
delegate?.collectionView.reloadData()
delegate?.loadNewMessages = false
delegate?.viewDidLoad()
dismiss(animated: true, completion: nil)
}

最佳答案

通常,您应该尝试尽可能松散地耦合独立的类。这是委托(delegate)模式的目的之一——“A”类可以通知委托(delegate)人发生了某事并提供一些数据。 A 类不需要知道(也不应该知道)关于委托(delegate)对象的任何更多信息,除了它实现了委托(delegate)方法。

您当前的代码是紧耦合的;您正在更新委托(delegate)对象的属性并重新加载 Collection View 。

您的委托(delegate)模式应如下所示:

protocol FriendSelectionDelegate {
func didSelectRecipient(friend: Friend)
}

然后在您的弹出 View Controller 中,您只需要:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let friend = friendsList[indexPath.row]
delegate?.didSelectRecipient(friend: friend)
dismiss(animated: true, completion: nil)
}

在你的 ChatVC 中:

extension ChatVC: FriendSelectionDelegate {
func didSelectRecipient(friend: Friend) {
self.friendProfileImage = friend.profileImage
self.friendName = friend.name
self.friendId = friend.id
self.friendIsOnline = friend.isOnline
self.friendLastLogin = friend.lastLogin
self.forwardedMessage = true
self.messages = []
self.loadNewMessages = false
self.updateView()
}
}

updateView 函数执行更新 View 所需的任何操作。您可以在 viewDidLoad 中调用相同的函数来设置 View 的初始状态

作为进一步的改进,请考虑您是否需要所有这些单独的属性(friendNamefriendId 等)。您能否仅存储一个属性,var selectedFriend: Friend 或其他内容,然后从该 Friend 访问属性。然后,您可以在该 selectedFriend 属性上使用 didSet 来调用您的 updateView 函数。

关于ios - 在另一个 Controller 中调用 viewDidLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59522963/

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