gpt4 book ai didi

swift - 将变量从 customCell.xib 的按钮传递到另一个 UIViewController

转载 作者:行者123 更新时间:2023-11-28 12:09:41 25 4
gpt4 key购买 nike

我的自定义单元格有一个按钮,单击该按钮时,用户可以转到另一个 ViewControler。该按钮有一个带有用户 ID 字符串的 titleLabel。我想要做的是将用户带到一个新的 UIViewController,将单击按钮的 titleLabel(用户 ID)传递给新 View Controller 上的一个变量。这样,我就可以使用该变量(用户 ID)从 firebase 获取更多信息并将其显示在 UI View Controller 上。

在自定义单元格的 .xib 上,我打印 UID 以确保每个按钮都打印有对应的 ID,它确实如此。我想不出将该 ID 传递给新 ViewController 的方法。

我尝试在线研究,发现您无法在 customCell.xib 上执行 prepare(for segue) 或 performsegue(WithIdentifier)。

我尝试过委托(delegate)和协议(protocol),但仍然无法正常工作。我是 Swift 的新手。任何帮助都会很棒,谢谢!

这是 customCell.Xib 的 Swift 文件:

class CustomCellTableViewCell: UITableViewCell {

@IBOutlet weak var postImage: UIImageView!
@IBOutlet weak var nameLbl: UILabel!
@IBOutlet weak var descriptionLbl: UITextView!
@IBOutlet weak var profileImageBtn: UIButton!
@IBOutlet weak var profileImage: UIImageView!

@IBOutlet weak var view: UIView!

var btnSelected : Bool = false
var vcInstance: ProfilesTableVC?

override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
view.clipsToBounds = true
view.layer.cornerRadius = view.frame.size.width / 2
profileImage.layer.cornerRadius = profileImage.frame.size.width / 2
descriptionLbl.alpha = 0.7
}

override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)


}



@IBAction func profileBtnPressed(_ sender: Any) {
let passValue = UserProfileVC()
let profileTvC = ProfilesTableVC()
print (profileImageBtn.titleLabel!.text!)
var id = (profileImageBtn.titleLabel!.text!)

profileTvC.didSelectProfileBtn(senderID: id)

}

这是 tableViewController,我在其中加载所有内容(而不是我想传递值的地方)。我尝试在此处传递值,然后执行 prepareForSegue 以将值传递给新的 UIViewController,但在 segue 发生后该值变为 nil。我只包含 .xib 从 TableView 调用函数的代码。

class ProfilesTableVC: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate,UINavigationControllerDelegate,  UIImagePickerControllerDelegate{

let cell = CustomCellTableViewCell()
func didSelectProfileBtn(senderID: String) {

senderIDArray.append(senderID)
var index = senderIDArray.count - 1
selectedCellUserID = senderIDArray[index]
performSegue(withIdentifier: "showSendersProfile", sender: Any?.self)


}

这是 UIViewController,我想在其中传递变量并使用该 ID 显示来自 Firebase 的更多信息

import UIKit
import Firebase

class UserProfileVC: UIViewController {

let customCell = CustomCellTableViewCell()
let profileTvC = ProfilesTableVC()

@IBOutlet weak var profileImage: UIImageView!
@IBOutlet weak var nameLbl: UILabel!

var delegate : Any?

var getName = String()
var getsenderID = String()

let userDataRef = Database.database().reference().child("Users")

override func viewDidLoad() {
super.viewDidLoad()
print("ID is: \(profileTvC.selectedCellUserID)")
let sender = getsenderID
print(sender)
}
}

最佳答案

如果您不想使用协议(protocol),您可以在 tableView - cellForRowAt 方法中将 Target 添加到按钮,同样在该方法中,您将标签设置为行索引值。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let profileCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) as! MoviewReviewCell
reviewCell.profileImageBtn.tag = indexPath.row
reviewCell.profileImageBtn.addTarget(self, action: #selector(tappedOnXibCellButton), for: .touchUpInside)
return reviewCell
}

@objc func tappedOnXibCellButton(sender: UIButton) {
print(sender.tag)
performSegue(withIdentifier: reviewListToDetails, sender: sender.tag)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let identifier = segue.identifier
if identifier == "segueName" {
let destViewController = segue.destination as! DestinationClassViewController
let selectedIndex = sender as! Int
let profileId = profilesList[selectedIndex].id
destViewController.profileId = profileId
}
}

关于swift - 将变量从 customCell.xib 的按钮传递到另一个 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48725706/

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