我想知道是否有可能推送到新的viewController,同时保持对执行推送的VC上数据的访问。我想知道是否有一种方法可以完成此操作,或者我是否可以以某种方式使特定信息在全球范围内可用于其他视图?
例如,我有用户名和图像是从profileVC的firebase中检索的,我想按下一个按钮,将其发送到另一个同时显示该名称和图像的ViewController。
我将在下面显示如何称呼此信息。
class userProfileHeader: UICollectionViewCell {
var user: User? {
didSet {
configureMessageacceptButton()
let name = user?.name
nameLabel.text = name
guard let profileImageUrl = user?.profileImageUrl else { return }
profileImageView.loadImageUsingCacheWithUrlString(profileImageUrl)
}
}
lazy var acceptButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("Loading",for: .normal)
button.layer.cornerRadius = 3
button.layer.borderColor = GREEN_Theme.cgColor
button.layer.borderWidth = 0.5
button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 14)
button.setTitleColor(GREEN_Theme,for: .normal)
button.addTarget(self,action: #selector(handleacceptRequest),for: .touchUpInside)
return button
}()
let profileImageView: UIImageView = {
let image = UIImageView()
image.image = UIImage(named: "users")
image.translatesAutoresizingMaskintoConstraints = false
image.contentMode = .scaleAspectFill
return image
}()
let nameLabel: UILabel = {
let label = UILabel()
label.text = "Jane John Doe"
label.font = UIFont.systemFont(ofSize: 30)
label.numberOfLines = 0
label.textColor = UIColor.black
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(imageView)
imageView.anchors(top: topAnchor,topPad: 0,bottom: bottomAnchor,bottomPad: 0,left: leftAnchor,leftPad: 0,right: rightAnchor,rightPad: 0,height: 100,width: 200)
setupProfileImageView()
setupNameView()
}
func setupProfileImageView() {
imageView.addSubview(self.profileImageView)
self.profileImageView.anchors(top: nil,bottom: nil,left: imageView.leftAnchor,leftPad: 16,right: nil,width: 100)
self.profileImageView.translatesAutoresizingMaskintoConstraints = false
self.profileImageView.centerYAnchor.constraint(equalTo: self.imageView.centerYAnchor).isactive = true
self.profileImageView.layer.zPosition = 10
self.profileImageView.layer.cornerRadius = 50
self.profileImageView.layer.masksToBounds = true
self.profileImageView.contentMode = .scaleAspectFill
self.profileImageView.image=#imageLiteral(resourceName: "user")
}
func setupNameView() {
imageView.addSubview(self.nameLabel)
self.nameLabel.anchors(top: profileImageView.bottomAnchor,topPad: 10,left: profileImageView.leftAnchor,height: 30,width: 100)
self.nameLabel.translatesAutoresizingMaskintoConstraints = false
self.nameLabel.layer.zPosition = 10
self.nameLabel.centerXAnchor.constraint(equalTo: imageView.centerXAnchor).isactive = true
}
@objc func handleacceptRequest() {
let user = self.user
let username = user?.name
let alert = UIAlertController(title: "Are you Sure? ",message:" Would you like to accept \(username!) to complete your job?",preferredStyle: UIAlertController.Style.alert)
let cancelButton = UIAlertaction(title: "Cancel",style: .default,handler: {(_ action: UIAlertaction) -> Void in
print("you pressed Yes,please button")
})
let continueButton = UIAlertaction(title: "Continue",handler: {(_ action: UIAlertaction) -> Void in
self.saveUserData(didaccept: "yes")
let acceptWorker = acceptWorkerViewController()
let navController = UINavigationController(rootViewController: acceptWorker)
self.window?.rootViewController?.present(navController,animated: true,completion: nil)
print("you pressed Continue")
})
continueButton.setvalue(GREEN_Theme,forKey: "titleTextColor")
cancelButton.setvalue(UIColor.red,forKey: "titleTextColor")
alert.addaction(cancelButton)
alert.addaction(continueButton)
self.window?.rootViewController?.present(alert,completion: nil)
}
fileprivate func configureMessageacceptButton() {
guard let currentUID = Auth.auth().currentUser?.uid else { return }
guard let user = self.user else { return }
if currentUID != user.uid {
imageView.addSubview(self.acceptButton)
imageView.addSubview(self.sendMessageButton)
self.acceptButton.anchors(top: profileImageView.topAnchor,left: nil,right: imageView.rightAnchor,rightPad: 16,height: 40,width: 120)
self.sendMessageButton.anchors(top: acceptButton.bottomAnchor,topPad: 16,left: acceptButton.leftAnchor,width: 120)
acceptButton.setTitle("accept Request",for: .normal)
sendMessageButton.setTitle("Send Message",for: .normal)
} else {
print("this is the currentUser profile")
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
很抱歉,大量的代码,我只想显示代表我在说什么的所有代码。在func handleacceptRequest()中,这就是我推送到新ViewController的方式。推送时是否可以保留此viewController内部的数据?