如何识别触发单个故事板Segue的多个按钮

时间:2015-06-04 00:29:32

标签: ios xcode swift

我在一个视图上有77个按钮。这77个按钮位于收集插座中。按钮被连线以触发相同的seguesegue显示detailViewController,其中包含从按钮传递给它的信息。我需要知道什么按钮触发了segue,以便我知道要传递给细节控制器的数据。

我在viewDidLoad方法中设置标记:

override func viewDidLoad() {
    super.viewDidLoad()

    self.containerView.backgroundColor = UIColor.blackColor()

    var count = 0

    for item in buttonOutlets {

        item.layer.cornerRadius = 2.0
        item.layer.borderWidth = 2.0
        item.tag = count
        item.layer.borderColor = UIColor.yellowColor().CGColor
        item.addTarget(self, action: Selector("handleButtonPress"), forControlEvents: UIControlEvents.TouchUpInside)

        count = count + 1
        println(item.tag)   // prints correct tag numbers

    }

    self.fetchAllObjects()

}

这是我的prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var upcoming: itemDetail = segue.destinationViewController as! itemDetail

if (segue.identifier == "loadDetailView") {

println(buttonOutlets[1].tag) // prints correct tag number

    let objectPlace = sender?.tag
    upcoming.parseObject = collectionObjects[objectPlace!] as? PFObject
}

1 个答案:

答案 0 :(得分:1)

答案在于item.addTarget.操作选择器调用handleButtonPress。我原来的按钮处理器是:

func handleButtonPress(sender: UIButton) {
    self.performSegueWithIdentifier("loadDetailView", sender: self)        
}

我缺少的是sender: sender

func handleButtonPress(sender: UIButton) {      
    self.performSegueWithIdentifier("loadDetailView", sender: sender)     
}

然后在handleButtonPress电话中添加冒号:

 item.addTarget(self, action: Selector("handleButtonPress:"), forControlEvents: UIControlEvents.TouchUpInside)