2015-02-15 1 views
2

Я пытаюсь создать большую часть кнопки программно, тогда, когда я нажимаю на каждую кнопку, она покажет мне значение тега кнопки в другом ViewController Метка.Swift - PrepareForSegue не может передать sender.tag (значение nil в другой метке ViewController)

Мой код для создания кнопки:

for index in 0..<ID.count { 
     let button = UIButton.buttonWithType(UIButtonType.System) as UIButton 
     button.tag = ID[index] 
     button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)} 

Моя функция кнопки действия:

func buttonAction(sender:UIButton!) 
{ 
    self.performSegueWithIdentifier("segueIdentifier", sender: self) 
} 

Мои prepareForSegue функции:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier == "segueIdentifier") { 
     var svc = segue.destinationViewController as NextViewController; 

     var tag = sender.tag 
     svc.toPass = "\(tag)" 
    } 
} 

Мой код в NextViewController:

var toPass: String! 

@IBOutlet var testLabel: UILabel! 
override func viewDidLoad() { 
    super.viewDidLoad() 

    testLabel.text = toPass 
} 

Я уже связал оба ViewController с помощью push segue. Однако, когда я нажимаю кнопку, метка в NextViewController показывает «nil». Если я изменю svc.toPass = "(tag)" до svc.toPass = "something", на этикетке будет указано "что-то". Возможно, есть проблемы с отправителем в функции prepareForSegue. Пожалуйста помоги. Спасибо.

ответ

3

Да, речь идет о параметре отправителя. В сенсорной кнопки обработчик:

func buttonAction(sender:UIButton!) 
{ 
    self.performSegueWithIdentifier("segueIdentifier", sender: self) 
} 

вы выполняете SEGUE, передавая self в качестве отправителя, т.е. экземпляра контроллера представления. В prepareForSegue вы читаете свойство тега отправителя, которое является тегом контроллера представления.

Я думаю, что можно исправить, просто передавая экземпляр кнопки в качестве отправителя:

func buttonAction(sender:UIButton!) 
{ 
    self.performSegueWithIdentifier("segueIdentifier", sender: sender) 
    //               ^^^^^^ 
} 
+0

Спасибо Антонио, это работает. – TheNewBie

Смежные вопросы