Передать заголовок строки таблицы в viewcontroller swift

avatar
bgrow11
8 апреля 2018 в 12:23
69
1
0

У меня все работает при переходе от табличного представления к моему контроллеру представления. Единственная проблема, которая у меня есть, это когда я перехожу от tableview к viewcontrller, моя переменная не передается. Он отображается как пустой.

Когда я печатаю на консоль в контроллере tableview, я вижу, что моя переменная не пуста, но при получении ее в контроллере представления она пуста. Я не могу понять, почему моя переменная не передается моему контроллеру представления. Любая помощь или идеи приветствуются.

Метод контроллера Tableview:

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    // Get Cell Label
    let indexPath = tableView.indexPathForSelectedRow!
    let currentCell = tableView.cellForRow(at: indexPath)! as UITableViewCell

    //valueToPass = currentCell.textLabel?.text
    let myVC = storyboard?.instantiateViewController(withIdentifier: "selectedMeterView") as! SelectMeterDetailsViewController
    myVC.stringPassed = (currentCell.textLabel?.text)!
    print(myVC.stringPassed)
    navigationController?.pushViewController(myVC, animated: true)
}

Этот мой контроллер представления получает переменную:

import UIKit
import Foundation

class SelectMeterDetailsViewController: UIViewController {

    var stringPassed = ""

    @IBOutlet weak var meterNameOuput: UILabel!


    override func viewDidLoad() {
        super.viewDidLoad()
        meterNameOuput.text = "THis is a test \(stringPassed)"
    }


    @IBAction func goBackToTableview(_ sender: UIBarButtonItem) {
        performSegue(withIdentifier: "backToTableVIew", sender: self)
    }
}
Источник
Ahmad F
8 апреля 2018 в 12:30
0

Вместо объявления myVC в методе didSelectRowAt я бы рекомендовал реализовать для такого процесса метод prepareForSegue.

Ответы (1)

avatar
Sh_Khan
8 апреля 2018 в 12:26
0

Сначала в SelectMeterDetailsViewController объявить переменную следующим образом

var stringPassed:String?

Второй

 @IBAction func goBackToTableview(_ sender: UIBarButtonItem) {
   //// pop the view controller don't segue back
  self.navigationController?.popViewController(animated: true)
}
bgrow11
8 апреля 2018 в 13:07
0

Я последовал вашим предложениям, и теперь я получаю ноль на своем ярлыке во втором контроллере просмотра. Это лучше, чем раньше, потому что я становился просто пустым. В моей консоли у меня есть оператор печати в виде таблицы и контроллер представления. Сначала печатается nil, который находится в моем втором контроллере представления, а затем мой контроллер табличного представления печатает переменную. Я бы подумал, что табличное представление будет печататься первым, а затем будет печататься второй контроллер представления. Любые идеи относительно того, почему он это делает?

Sh_Khan
8 апреля 2018 в 13:11
0

Вы установили какие-либо переходы в конструкторе интерфейсов ??

bgrow11
8 апреля 2018 в 13:14
0

Да, у меня есть Present Modally, идущий из моей ячейки таблицы ко второму контроллеру представления.

Sh_Khan
8 апреля 2018 в 13:15
0

удалить этот переход

bgrow11
8 апреля 2018 в 13:44
0

Когда это удалено, когда я нажимаю ячейку, теперь не загружается контроллер просмотра.

Sh_Khan
8 апреля 2018 в 13:46
0

Убедитесь, что контроллер табличного представления встроен в печать uinavigationcontroller (self.navigationController) внутри didSelect

VIP-DEV
8 апреля 2018 в 15:04
0

Вы должны установить свою метку после нажатия на контроллер.