Ios Swift didSelectRowAt将数组值传递给第二个视图
我正在寻找解决将数据从第一个视图控制器转换到第二个视图控制器的问题的方法。当用户选择表格单元格时,将调用第二个视图控制器 填充第一个tableview的代码Ios Swift didSelectRowAt将数组值传递给第二个视图,ios,swift,uitableview,segue,Ios,Swift,Uitableview,Segue,我正在寻找解决将数据从第一个视图控制器转换到第二个视图控制器的问题的方法。当用户选择表格单元格时,将调用第二个视图控制器 填充第一个tableview的代码 public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = mtgRates.dequeueReusableCell(withIdentifier: "cel
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = mtgRates.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ViewControllerTableViewCell
cell.fiName.text = fetchedFiName[indexPath.row].fiName
cell.oneYear.text = fetchedFiName[indexPath.row].oneYear
cell.twoYear.text = fetchedFiName[indexPath.row].twoYear
cell.threeYear.text = fetchedFiName[indexPath.row].threeYear
cell.fourYear.text = fetchedFiName[indexPath.row].fourYear
cell.fiveYear.text = fetchedFiName[indexPath.row].fiveYear
return (cell)
}
我看过很多youtube视频,但在使用数组集全局设置数据时,它们都采用了简单的方法
代码,我一直在工作,但在这一点上什么也不做
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
oneYearFound = self.fetchedFiName[indexPath.row].oneYear
twoYearFound = self.fetchedFiName[indexPath.row].twoYear
threeYearFound = self.fetchedFiName[indexPath.row].threeYear
fourYearFound = self.fetchedFiName[indexPath.row].fourYear
fiveYearFound = self.fetchedFiName[indexPath.row].fiveYear
performSegue(withIdentifier: "segue", sender: self)
}
我认为我的问题是将获取的结果发送到第二个视图控制器
谢谢你的帮助
更多信息基于回复。你是对的,我在故事板上有两个视图控制器。到目前为止,我的UIViewController的代码是
class SegueViewController: UIViewController {
@IBOutlet weak var V2TwoYear: UILabel!
@IBOutlet weak var V2FiveYear: UILabel!
@IBOutlet weak var V2FourYear: UILabel!
@IBOutlet weak var V2ThreeYear: UILabel!
@IBOutlet weak var V2OneYear: UILabel!
@IBOutlet weak var V2FiName: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
V2FiName.text = foundFi[myIndex].fiName
V2TwoYear.text = foundFi[myIndex].twoYear
V2OneYear.text = foundFi[myIndex].oneYear
V2ThreeYear.text = foundFi[myIndex].threeYear
V2FourYear.text = foundFi[myIndex].fourYear
V2FiName.text = foundFi[myIndex].fiveYear
}
我需要做一些假设:
class LabelsClass {
var str1:String;
var str2:String;
init(firstName:String, secondName:String) {
str1 = firstName;
str2 = secondName;
}
}
class SegueViewController: UIViewController {
var firstLabelString:String = ""
var secondLabelString:String = ""
func setValues(labels:LabelsClass) {
self.firstLabelString = labels.str1;
self.secondLabelString = labels.str2;
}
}
class MessageListViewController: UIViewController {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var first = "Game"
var second = "maniac"
var localLabelsVar = LabelsClass.init(firstName: first,secondName: second);
var destVC = segue.destination as? SegueViewController
destVC?.setValues(labels: localLobalsVar)
}
}
资料来源:
为什么不传递fetchedFiName的实例
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedFiName = self.fetchedFiName[indexPath.row]
performSegue(withIdentifier: "segue", sender: selectedFiName)
}
然后,将您的发件人强制转换为您的\u FETCHED\u FI\u NAME\u CLASS,并在PrepareForegue中将其传递给您的目标视图控制器:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let selectedFiName = sender as? YOUR_FETCHED_FI_NAME_CLASS,
destVC = segue.destination as? SegueViewController {
destVC.passedFiName = selectedFiName
}
}
然后,在目标viewController和ViewDidLoad之后(因为在此之前不会加载标签),您可以使用passedFiName
填充标签
override func viewDidLoad() {
super.viewDidLoad()
updateLabels()
}
func updateLabels() {
V2FiName.text = passedFiName.fiName
V2TwoYear.text = passedFiName.twoYear
V2OneYear.text = passedFiName.oneYear
V2ThreeYear.text = passedFiName.threeYear
V2FourYear.text = passedFiName.fourYear
V2FiName.text = passedFiName.fiveYear
}
更新:
我仍然有这个问题。我想我越来越近了
控制器1代码
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedFiName = self.fetchedFiName[indexPath.row].fiName
let selectedOneYear = self.fetchedFiName[indexPath.row].oneYear
let selectedTwoYear = self.fetchedFiName[indexPath.row].twoYear
let selectedThreeYear = self.fetchedFiName[indexPath.row].threeYear
let selectedFourYear = self.fetchedFiName[indexPath.row].fourYear
let selectedFiveYear = self.fetchedFiName[indexPath.row].fiveYear
passData = [SecondTable(passedFIName: selectedFiName, passedOneYear: selectedOneYear, passedTwoYear: selectedTwoYear, passedThreeYear: selectedThreeYear, passedFourYear: selectedFourYear, passedFiveYear: selectedFiveYear)]
performSegue(withIdentifier: "SecondViewController", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let selectedFiName = sender as! ,
let destVC = segue.destination as? SecondViewController {
destVC.fiName = selectedFiName
}
}
第二视图控制器代码`
struct SecondTable {
var passedFIName: String = ""
var passedOneYear: String = ""
var passedTwoYear: String = ""
var passedThreeYear: String = ""
var passedFourYear: String = ""
var passedFiveYear: String = ""
}
类SecondViewController:UIViewController{
@IBOutlet weak var fiName: UILabel!
@IBOutlet weak var sometext: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let fiDetails = SecondTable()
fiName.text = .passedFIName
sometext.text = "Some Text"
}
}
我在“override func prepare”处收到错误消息(对于segue:UIStoryboardSegue,发送方:Any?){
我不知道在“发件人”后面加什么作为“缺少值”
我已经搜索了几个小时。我解决了这个问题。我的项目将开始进行。谢谢你的帮助!`请描述foundFi和myIndex的定义和分配位置。我几天前根据帖子移动了这种方法。我昨晚发布了更新的代码。我在上面的帖子中添加了一些代码来说明这个问题除此之外,我正在尝试解释。通过一些更改,您应该能够理解如何对代码执行相同的操作。谢谢。我对此非常陌生。我需要确认每组代码应放置在何处。您可能需要创建一个新文件来保存labels对象。然后,第一个和segue视图控制器将放在它们自己的类中。我结尾不是全部答案,但你可以学习并适应它。我不知道我应该在这里放什么你的\u FETCHED\u FI\u NAME\u类。我有一个错误“SequeViewController没有成员passedFiName。请注意,附加到我的第二个视图控制器的类是SegueViewController。第一个视图控制器称为ViewController您正在将
发送方
强制转换到您的foundFi[myIndex]的类
。包含属性fiName的一年、两年、三年、四年、五年