通过 segue 问题在 UITableView 和 UIViewController 之间推送数据
Posted
技术标签:
【中文标题】通过 segue 问题在 UITableView 和 UIViewController 之间推送数据【英文标题】:Pushing data between UITableView and UIViewController via segue issue 【发布时间】:2019-03-02 21:44:57 【问题描述】:我想将数据从 UITableView 推送到 UIviewController。我想将counter
设置为在 UITableView 中选择的行的值,然后将此值推送到 UIViewController。我遇到的问题是,最初无论我在 UITableView 中按哪一行,它都会设置counter
= 0
然后,如果我关闭 ViewController 以返回 UITableView 并选择另一行,counter
的值将等于我选择的前一行。所以这将是一个落后的新闻。我该如何解决这个问题?
UITableViewController swift文件为:
import Foundation
import UIKit
class TableViewController : UITableViewController
@IBOutlet var Tableview: UITableView!
var sectionName = ["Day 0","Day 1","Day 2","Day 3","Day 4","Day 5","Day 6"]
var rowselected = Int()
override func viewDidLoad()
super.viewDidLoad()
//setting up tableview rows
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return sectionName.count
//what cell is & how it looks
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = Tableview.dequeueReusableCell(withIdentifier: "cell") as! UITableViewCell!
cell?.textLabel?.text = sectionName[(indexPath as NSIndexPath).row]
cell?.textLabel?.textAlignment = .center
cell?.textLabel?.font = UIFont(name: "Avenir", size:30)
return cell!
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
let destinationVC = segue.destination as! foodinfo
destinationVC.counter = rowselected
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
rowselected = indexPath.row
self.performSegue(withIdentifier: "dayx", sender: self)
我的 ViewController (foodinfo) swift 文件是:
import Foundation
import AVKit
class foodinfo: UIViewController
var counter = Int()
@IBOutlet var tabs: UISegmentedControl!
@IBOutlet var shiftView: UIView!
@IBOutlet var theTitleLable: UILabel!
var simpleView1: UIView!
var simpleView2: UIView!
var theTitleArray = ["apple","orange","bananna","kiwi","grape","mango","avo"]
override func viewDidLoad()
simpleView1 = SimpleVC1().view
simpleView2 = SimpleVC2().view
shiftView.addSubview(simpleView2)
shiftView.addSubview(simpleView1)
getTitle()
func getTitle()
theTitleLable.text = theTitleArray[counter]
//segmented controller tabs for swapping old view
@IBAction func tabselected(_ sender: Any)
switch (sender as AnyObject).selectedSegmentIndex
case 0:
shiftView.bringSubviewToFront(simpleView1)
break
case 1:
shiftView.bringSubviewToFront(simpleView2)
break
case 2:
shiftView.bringSubviewToFront(simpleView1)
break
default:
break
//back to tableview
@IBAction func backToSections(_ sender: Any)
self.dismiss(animated: true, completion: nil)
【问题讨论】:
原来是segues。谢谢。 从 vc 而非单元格中选择。它现在工作。谢谢 【参考方案1】:您需要确保 segue 源是 viewController 本身而不是单元格,就好像它是在 didSelectRowAt
之前触发 segue 执行的单元格,因此计数器传递的值会产生误导
【讨论】:
【参考方案2】:您创建每次计数器。不要这样做。你试试;
class foodinfo: UIViewController
var counter:Int = 0
【讨论】:
谢谢,但这不起作用。通过在 foodinfo 中将计数器设置为 0,它只会产生与我已经拥有的结果相同的结果。以上是关于通过 segue 问题在 UITableView 和 UIViewController 之间推送数据的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableView 上执行具有多个状态的 segue 的问题
带有详细信息的 UITableView 清单(防止 Segue?)
详细视图 UITableView - 在 segue 之前传递数据
使用 swrevealviewcontroller 在 ViewController 中嵌入 uitableView 中的 Segues