Не удается передать данные на второй контроллер с Segue - PullRequest
0 голосов
/ 26 ноября 2018

Я не могу заставить работать простой переход, когда ячейка в табличном представлении нажата.Он переходит к следующему представлению после того, как я коснулся двух разных пунктов.Но я не могу передать какие-либо значения от первого контроллера ко второму.Если я устанавливаю значение для метки во втором контроллере и загружаю его в методе viewDidLoad, оно появляется.

Я схожу с ума, пытаясь получить эту работу целую вечность .....

Моя раскадровка: https://snag.gy/DCw9MU.jpg

CategoryListViewController (1-й контроллер):

import Foundation
import UIKit

class CategoryListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    var categoryList = TestData.sharedInstance.categoryList


    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationItem.title = "iEngineer"
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.tableView .reloadData()
        tableView.dataSource = self
        for category in categoryList{
            print(category)
        }

    }

    // MARK: - Segues
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showFormulaList" {
            if let indexPath = tableView.indexPathForSelectedRow {
                let category = self.categoryList[indexPath.row]
                let formulaListViewController = (segue.destination as! UINavigationController).topViewController as! FormulaListViewController
                formulaListViewController.text = category
                formulaListViewController.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
                formulaListViewController.navigationItem.leftItemsSupplementBackButton = true
            }
        }

    }

    // MARK: - Table View
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        print(categoryList.count)
        return categoryList.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "categoryCell", for: indexPath)
        let object = categoryList[indexPath.row]
        cell.textLabel!.text = object
        return cell
    }

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "showFormulaList", sender: self)
    }
}

FormulaListViewController (2-й контроллер):

import Foundation
import UIKit

class FormulaListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {


    @IBOutlet weak var titleLabel: UILabel!

    var formulaList = TestData.sharedInstance.formulaList

    var fSwift: String!


    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationItem.title = "iEngineer"
        print(fSwift)
        titleLabel.text = fSwift

    }

    // MARK: - Table View
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        print(formulaList.count)
        return formulaList.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "formulaCell", for: indexPath)
        let object = formulaList[indexPath.row]
        print(object)
        cell.textLabel!.text = object
        return cell
    }
}

Где моя ошибка или что я делаю не так?

Я очень ценю любую помощь

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Вы использовали didDeselectRowAt:

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "showFormulaList", sender: self)
}

Вам необходимо использовать didSelectRowAt:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            performSegue(withIdentifier: "showFormulaList", sender: self)
}
0 голосов
/ 26 ноября 2018
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "showFormulaList", sender: self)
}

Вы должны использовать didSelect вместо didDeselectRowAt, также вы должны передать что-то лучше, чем self , потому что с self вы передаете весь CategoryListViewController Попробуйте передать indexPath какэто

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "showFormulaList", sender: indexPath)
}

и изменить функцию подготовки в этом

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showFormulaList" {
        if let indexPath = sender as? IndexPath {
            let category = self.categoryList[indexPath.row]
            let formulaListViewController = (segue.destination as! UINavigationController).topViewController as! FormulaListViewController
            formulaListViewController.fuckSwift = category
            formulaListViewController.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
            formulaListViewController.navigationItem.leftItemsSupplementBackButton = true
        }
    }

}

Если это не поможет вам попытаться отладить свой код и найти, где вы потеряли свою переменную:)

0 голосов
/ 26 ноября 2018

Вам нужно didSelectRowAt вместо didDeselectRowAt

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "showFormulaList", sender: self)
}

Также убедитесь, что источником перехода является vc, а не ячейка, и, поскольку вы запускаете переход в didDeselectRowAt, это

if let indexPath = tableView.indexPathForSelectedRow 

будет ноль

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...