【问题标题】:Pushing data between UITableView and UIViewController via segue issue通过 segue 问题在 UITableView 和 UIViewController 之间推送数据
【发布时间】: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 而非单元格中选择。它现在工作。谢谢

标签: ios swift uitableview segue


【解决方案1】:

您需要确保 segue 源是 viewController 本身而不是单元格,就好像它是在 didSelectRowAt 之前触发 segue 执行的单元格,因此计数器传递的值会产生误导

【讨论】:

    【解决方案2】:

    您创建每次计数器。不要这样做。你试试;

    class foodinfo: UIViewController {
    
        var counter:Int = 0
    }
    

    【讨论】:

    • 谢谢,但这不起作用。通过在 foodinfo 中将计数器设置为 0,它只会产生与我已经拥有的结果相同的结果。
    猜你喜欢
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多