Swift - PrepareForSegue 在传递sender.tag时失败(在其他视图控制器的标签中为nil值)

4

我尝试以编程方式创建大量的按钮,然后当我点击每个按钮时,它将在另一个 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将两个视图控制器连接起来。但是,当我点击按钮时,NextViewController中的标签显示为“nil”。 如果我更改svc.toPass = "(tag)"svc.toPass = "something",标签将显示“something”。可能是prepareForSegue函数中的发送方存在问题。请帮忙看看。谢谢。

1个回答

4

是的,与发送者参数有关。在按钮触摸处理程序中:

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

您正在执行segue,并将self作为sender传递,即视图控制器实例。在prepareForSegue中,您正在读取sender的标记属性,该属性是视图控制器的标记。

我认为您可以通过仅将按钮实例作为sender来解决此问题:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接