Использование segues для передачи данных в Swift? - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь использовать segues для передачи данных, введенных в текстовое поле partyID, на метку partyID в отдельном контроллере представления. Тем не менее, я получаю ошибки в моем коде.

class PartyViewController: UIViewController {

    // CALLS LOGIN VC
    var LoginViewController: LoginViewController?

    override func viewDidLoad() {
        super.viewDidLoad()


        // Do any additional setup after loading the view.
    }
    @IBOutlet weak var partyID: UITextField!

    var token = String()

    @IBAction func startParty(_ sender: UIButton) {
        self.performSegue(withIdentifier: "partyVCtoGuestPartyVC", sender: self)
        performSegue(withIdentifier: "hostStartParty", sender: self)
        //LoginViewController?.fetchSpotifyProfile(accessToken )

        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
               if(segue.identifier == "partyVCtoGuestPartyVC"){
               let GuestPartyVC = segue.destination as! GuestPartyViewController
               GuestPartyVC.partyID = partyID.text
           }

А вот контроллер представления, которому я пытаюсь передать данные:

class GuestPartyViewController: UIViewController {
    @IBOutlet weak var partyID: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()


        partyIDLabel.text = partyID
        // Do any additional setup after loading the view.
    }

Я получаю ошибки в моем забаве переопределения c в LoginV C, а затем в partyIDlabel.text в GuestPartyV C.

Ответы [ 3 ]

1 голос
/ 01 апреля 2020

В GuestPartyViewController

class GuestPartyViewController: UIViewController {
    @IBOutlet weak var partyIDLabel: UILabel!

    var partyID: String? 

    override func viewDidLoad() {
        super.viewDidLoad()
        partyIDLabel.text = partyID ?? ""
    }
}

В PartyViewController

class PartyViewController: UIViewController {

    @IBOutlet weak var partyID: UITextField!


    @IBAction func startParty(_ sender: UIButton) {
        self.performSegue(withIdentifier: "partyVCtoGuestPartyVC", sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "partyVCtoGuestPartyVC",
            let GuestPartyVC = segue.destination as? GuestPartyViewController {
            GuestPartyVC.partyID = partyID.text
        }
    }
}
0 голосов
/ 01 апреля 2020

сначала измените вызов логина V C

var LoginViewController = LoginViewController()

, затем поместите это до того, как представление загрузило метод

@IBOutlet weak var partyID: UITextField!

и вы можете отправить полученную ошибку

0 голосов
/ 31 марта 2020

IBOutlet является слабым и не может быть создан при передаче текста.

Не могли бы вы попытаться передать текст в свойстве, а затем назначить его в viewDidLoad?

class GuestPartyViewController: UIViewController {

@IBOutlet weak var partyID: UILabel!

var passedText: String?

override func viewDidLoad() {
    super.viewDidLoad()

   if let unwrappedPassedText = passedText {
      partyIDLabel.text = partyID
   }
}

// В другом контроллере

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