Передача данных с помощью prepareForSegue

#ios #swift #swift2 #sender

#iOS #swift #swift2 #отправитель

Вопрос:

Я пытаюсь передать данные из ViewController 1 в ViewController2, у меня есть 2 кнопки и 1 переход (поэтому есть один идентификатор перехода) для этих 2 кнопок, каждая кнопка при нажатии должна показывать: 1 метку для отображения заголовка и 1 текстовое представление для отображения определения, у меня возникают проблемы с отображением собственногоданные каждого слова; Я знаю, что это должен быть некоторый код, ссылающийся на ОТПРАВИТЕЛЯ в performSegueWithIdentifier, но я не знаю, как это сделать.

Я ценю вашу помощь!!! Спасибо.

вот мой код

 class ViewController: UIViewController {

    @IBAction func AbstractionBtn(sender: AnyObject) {
        performSegueWithIdentifier("ShowDefinition", sender: "Abstraction")
    }

    @IBAction func binarySystemBtn(sender: AnyObject) {
        performSegueWithIdentifier("ShowDefinition", sender: "Binary System")

    }

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if (segue.identifier == "ShowDefinition") {
            if let destinationViewController = segue.destinationViewController as? EnglishViewController {
                destinationViewController.titleMsg = "Abstraction"
                destinationViewController.definitionMsg = "Abstraction Definition"
            }
    } else if(segue.identifier == "ShowDefinition"){if let destinationViewController = segue.destinationViewController as? EnglishViewController {
            destinationViewController.titleMsg = "Binary System"
            destinationViewController.definitionMsg = "Binary System Definition"
            }
        }    
}
  

Комментарии:

1. что вы хотите сделать в методе prepareForSegue?

2. я хочу, чтобы при нажатии кнопки «абстракция» в vc1 отображались заголовок и определение абстракции, а при нажатии кнопки «двоичная система» отображались ее заголовок и определение, я работаю в словаре.

Ответ №1:

Вы правильно передали определение в виде строки в параметре sender в performSegueWithIdentifier. Вам просто нужно использовать его значение в prepareForSegue, но сначала вы должны использовать его из AnyObject? возврат к строке.

Ваш код может быть примерно таким:

 class ViewController: UIViewController {
    @IBAction func AbstractionBtn(sender: AnyObject) {
        performSegueWithIdentifier("ShowDefinition", sender: "Abstraction")
    }

    @IBAction func binarySystemBtn(sender: AnyObject) {
        performSegueWithIdentifier("ShowDefinition", sender: "Binary System")
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if (segue.identifier == "ShowDefinition") {
            if let destinationViewController = segue.destinationViewController as? EnglishViewController {
                if let definition = sender as? String {
                    if definition == "Abstraction" {
                        destinationViewController.titleMsg = "Abstraction"
                        destinationViewController.definitionMsg = "Abstraction Definition"
                    } else if definition == "Binary System" {
                        destinationViewController.titleMsg = "Binary System"
                        destinationViewController.definitionMsg = "Binary System Definition"
                    }
                }
            }
        }
    }
}
  

Ответ №2:

Попробуйте это

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    if (segue.identifier == "ShowDefinition")
    {
        if let destinationViewController = segue.destinationViewController as? EnglishViewController
        {
             var btn = sender as! UIButton
            if btn.tag == 1
            {
                destinationViewController.titleMsg = "Abstraction"
                destinationViewController.definitionMsg = "Abstraction Definition"
            }
            else
            {
                destinationViewController.titleMsg = "Binary System"
                destinationViewController.definitionMsg = "Binary System Definition"

            }

        }
    }
}
  

И установите тег кнопки следующим образом

 AbstractionBtn.tag = 1
binarySystemBtn.tag = 2
  

Теперь вызовите segue следующим образом

 @IBAction func AbstractionBtn(sender: AnyObject) {
performSegueWithIdentifier("ShowDefinition", sender:sender)
}
  

Комментарии:

1. здравствуйте, куда мне поместить Abstractionbtn.tag = 1 и binarySystemBtn.tag = 2 ?

2. вы можете написать в методе viewDidLoad или напрямую указать в раскадровке, например, свойство UIButton «Tag»

Ответ №3:

Создайте переменную с именем titleMsg and definitionMsg . В каждом методе @IBAction установите соответствующее сообщение заголовка на self.titleMsg и аналогично для self.definitionMsg .

После этого вызова,

 performSegueWithIdentifier("ShowDefinition", sender: self)
  

А затем переопределить,

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "ShowDefinition" {
        let destinationVC = segue.destinationViewController as? EnglishViewController
        destinationVC.titleMsg = self.titleMsg
        destinationVC.definitionMsg = self.definitionMsg
    }
}
  

Надеюсь, это помогло!