Выбор UIPickerView отправляет значение nil новому ViewController - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь передать выбор UIPickerView в виде строки новому ViewController, к сожалению, когда я это делаю, он возвращает значение nil .Я следовал нескольким различным учебным пособиям, но я не могу заставить его работать.Будем благодарны за любые предложения.

class menu: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

    @IBOutlet weak var pickerView: UIPickerView!
    @IBOutlet weak var newsButton: UIButton!

    var pickerDataSource = ["Canterbury-Bankstown Torch", "Auburn Review", "Inner West Times", "Seniors "];
    var chosenState = String()

    override func viewDidLoad() {
        super.viewDidLoad()
        pickerView.delegate = self
        pickerView.dataSource = self
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return pickerDataSource.count;
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return pickerDataSource[row] as String
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        chosenState = pickerDataSource[row]
    }

    func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "customSegue" {
            if let secondViewController = segue.destination as? ViewController {
                secondViewController.chosenState = chosenState
            }
        }
    }

    @IBAction func newsButton(_ sender: Any) {
        self.performSegue(withIdentifier: "customSegue", sender: nil)
    }

Новый viewController содержит:

    var chosenState: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        finalPublication?.text = chosenState
        print(chosenState) //Just so I can see if it works
}

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Необходимо переопределить подготовку к переходу, чтобы вызвать метод prepareForSegue, и вы получили выбранное значение во втором контроллере.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "customSegue" {
        if let secondViewController = segue.destination as? ViewController1 {
            secondViewController.chosenState = chosenState
        }
    }
}
0 голосов
/ 04 октября 2018

вы используете неправильный метод func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)

Вы должны использовать это:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "customSegue" {
        if let secondViewController = segue.destination as? ViewController {
            secondViewController.chosenState = chosenState
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...