Swift - PrepareForSegue无法传递sender.tag(其他ViewController标签中的nil值)

时间:2015-02-15 09:15:36

标签: ios iphone swift ios8 segue

我尝试以编程方式创建大量按钮,然后当我单击每个按钮时,它将向我显示另一个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
}

我已经通过push segue链接了两个ViewController。但是,当我单击按钮时,NextViewController中的标签显示“nil”。 如果我将 svc.toPass =“(tag)”更改为 svc.toPass =“某事”,标签将显示“某事”。也许在prepareForSegue函数中发件人有一些问题。请帮忙。谢谢。

1 个答案:

答案 0 :(得分:4)

是的,关于sender参数。在按钮触摸处理程序中:

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

您正在执行segue,将self作为发件人传递,即视图控制器实例。在prepareForSegue,您正在阅读发件人的代码属性,即视图控制器的代码。

我认为您只需将按钮实例作为发件人传递即可解决此问题:

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