swift: 向按钮数组添加一个动作

swift: Adding an action to an array of buttons

我正在设计一个简单的数独应用程序,需要在单击 81 个按钮中的任何一个时触发一个操作。我在 ViewController 中创建了一个 UIButton 数组:

class SudokuBoardController : UIViewController {
@IBOutlet var collectionOfButtons: Array<UIButton>?

  override func viewDidLoad() {

    collectionOfButtons.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)

    ...
  } 
}

我可以从情节提要中将按钮添加到数组中,好的,就在我尝试添加目标时,我收到了这条消息:

Value of type 'Array<UIButton>?' has no member addTarget

有没有解决这个问题的方法,不需要我为每个按钮创建 81 个不同的输出?

感谢您的帮助!

干杯

您需要遍历按钮数组并将目标添加到每个按钮。试试下面的代码

var index = 0
for button in collectionOfButtons! {
    button.tag = index // setting tag, to identify button tapped in action method
    button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
    index++
}

你有一个 Array,所以你想遍历数组中的 UIButton。因为你在 Swift,你会想要以 Swifty 的方式这样做,而不是使用简单的 for 循环。

collectionOfButtons?.enumerate().forEach({ index, button in
    button.tag = index
    button.addTarget(self, action: "buttonClicked:", forControlEvents: .TouchUpInside)
})

这也很好地处理了 collectionOfButtons 是可选的这一事实,如果它是 nil,则不执行任何操作,而不是崩溃。