#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
}
}
Надеюсь, это помогло!