Swift - PrepareForSegue 未能通过 sender.tag(其他 ViewController 标签中的值为零)
Swift - PrepareForSegue fails to pass sender.tag (nil value in other ViewController Label)
我尝试以编程方式创建大量按钮,然后当我单击每个按钮时,它会在另一个 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)"
}
}
下一步我的代码ViewController:
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
作为发件人传递,即视图控制器实例。在 prepareForSegue
中,您正在读取发件人的标签 属性,这是视图控制器的标签。
我认为您可以通过将按钮实例作为发件人传递来解决此问题:
func buttonAction(sender:UIButton!)
{
self.performSegueWithIdentifier("segueIdentifier", sender: sender)
// ^^^^^^
}
我尝试以编程方式创建大量按钮,然后当我单击每个按钮时,它会在另一个 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)"
}
}
下一步我的代码ViewController:
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
作为发件人传递,即视图控制器实例。在 prepareForSegue
中,您正在读取发件人的标签 属性,这是视图控制器的标签。
我认为您可以通过将按钮实例作为发件人传递来解决此问题:
func buttonAction(sender:UIButton!)
{
self.performSegueWithIdentifier("segueIdentifier", sender: sender)
// ^^^^^^
}