Swift ios, как передать данные в другое представление, нажав на страницу - PullRequest
0 голосов
/ 08 мая 2018

Когда я использую segue при переходе к следующему представлению, мой код работает, и он может передавать данные между представлениями, но проблема заключается в том, что когда я использовал приведенный ниже код.

Код, который я использую для навигации, когда я использовал этот код ниже для навигации по override func prepare(for segue: UIStoryboardSegue, sender: Any?), который находится внизу, больше не работает. При использовании этой навигации данные больше не переходят к следующему виду. При использовании кода ниже

if let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ScoreViewController") as? ScoreViewController
{
    present(vc, animated: true, completion: nil)
}

Этот код не работает, когда используется segue для передачи данных в следующее представление

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let dist = segue.destination as? ScoreViewController {
            dist.kid_score = KidScore
            print("naka:" , dist.kid_score)

        }
    }

Есть ли другой способ передачи данных в следующий просмотр?

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Если вы хотите перейти к Controller на StoryBoard с идентификатором «ScoreViewController», то сделайте это (это будет применимо, когда вы пытаетесь отобразить ViewController одной раскадровки на другой раскадровке ViewController -

   let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
   let nextViewController = storyBoard.instantiateViewController(withIdentifier: "ScoreViewController") as! ScoreViewController
   self.present(nextViewController, animated:true, completion:nil)

ОБНОВЛЕНИЕ- Для передачи данных -

вы можете передать значение, используя struct - Создайте класс в файле swift, созданном как показано ниже

    class StructOperation {
      struct yourGlovalVariable {
      static var userName = String();
     }
 }

Присвоение значения static var userName переменной struct yourGlovalVariable в StructOperation классе из firstViewController like-

@IBAction func buttonnSend(_ sender: Any) {
    StructOperation.yourGlovalVariable.userName = "Akorn Durn Kurvirck";
   //Code Move to Second View Controller(first one- put it here)
 }

В вашем secondViewController контроллере представления получите значение, как показано ниже -

var username = StructOperation.yourGlovalVariable.userName;
0 голосов
/ 08 мая 2018

Вы можете передавать данные при следующем просмотре, используя оба пути. Сначала вам нужно определить свойство в вашем следующем ViewController с именем kid_score в вашем случае. Представляя ViewController, вы можете использовать данный код:

if let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ScoreViewController") as? ScoreViewController
{
  vc.kid_score = KidScore
  present(vc, animated: true, completion: nil)
}

Во втором случае вам нужно добавить идентификатор к этому segue и передать его в методе performSegue(withIdentifier: "YourIdentifier", sender: self). Ваш код для prepare правильный. Просто проверьте, можете ли вы напечатать значение KidScore, потому что оно выглядит как Type.

0 голосов
/ 08 мая 2018

Если вы действительно хотите вызвать функцию prepare(for segue..), то для перехода к другому представлению вы должны вызвать ее следующим образом:

self.performSegue(withIdentifier: "Your_Segue_Identifier", sender: Your_data)

Если вы выполните вышеуказанную строку, будет вызвана функция ниже,

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == Your_Identifier {
        let destination = segue.destination as! ScoreViewController
        destination.item = sender as! Your_Data
    }
}

UPDATE

Альтернативный способ передачи данных при передаче на другой контроллер представления.

let scoreVC = self.storyboard?.instantiateViewController(withIdentifier: "Identifier") as! ScoreViewController
scoreVC.item = Your_Data
self.navigationController?.pushViewController(scoreVC, animated: true)

Надеюсь, вы понимаете ответ и дайте мне знать, если у вас возникнут вопросы.

...