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

标签 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)}

我的按钮 Action 函数:

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 = "something",标签将显示“something”。也许 prepareForSegue 函数中的发件人存在一些问题。请帮忙。谢谢。

最佳答案

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

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

你正在执行 segue,将 self 作为发送者传递,即 View Controller 实例。在 prepareForSegue 中,您正在读取发送者的标签属性,这是 View Controller 的标签。

我认为你可以通过将按钮实例作为发件人传递来解决这个问题:

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

关于ios - Swift - PrepareForSegue 无法传递 sender.tag(其他 ViewController 标签中的值为 nil),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28524642/

相关文章:

ios - 将包含 AM/PM 的 NSString 转换为 NSDate

ios - iPad应用程序设计

ios - 即使在 GameScene 的 Update 方法中游戏还没有结束,我也会得到 "You Lose"

ios - 无法更新 SQlite3 表

Swift IOS 图表 - 堆积条形图

ios - 从另一个 View Controller 更新 View Controller 的内容而不打开它

iOS Google Sign In SDK webview 签名后不关闭

ios - Swift如何使导航中间部分图像和文本彼此相邻

ios - UIScrollView 中的 UIWebView,如 Apple Mail.app

ios - 如何计算不同时区的两个 NSDate 对象之间的天数差异?