2016-02-05 4 views
0

Я разрабатываю простое приложение Sudoku и должен запускать действие при нажатии любой из 81 кнопки. Я создал массив UIButtons в моем ViewController:swift: добавление действия в массив кнопок

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

    override func viewDidLoad() { 

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

    ... 
    } 
} 

Я могу добавить кнопки в массив из раскадровки нормально, его просто, когда я пытаюсь addTarget я получаю сообщение:

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

Есть ли решение этой проблемы, которая не включает в себя создание 81 различных выходов для каждой кнопки?

Благодарим за помощь!

Приветствия

ответ

2

Вам нужно перебирать массив кнопок и добавить цель каждой кнопки. Попробуйте следующий код

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++ 
} 
+0

Удивительный, это сработало, спасибо Вишну от очень благодарного Swift новичка! :) – colinmcp

4

У вас есть Array, так что вы хотите перебрать UIButton с в массиве. И поскольку вы находитесь в Swift, вы захотите сделать это в Swifty, не используя простой цикл for.

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

Это также прекрасно справляется с тем, что collectionOfButtons является необязательным, ничего не делая, если это nil, в отличие от сбоев.

+0

Спасибо! Этот ответ тоже сработал. Весьма признателен. :) – colinmcp

 Смежные вопросы

  • Нет связанных вопросов^_^