UIBarButtonItem Действие, созданное в другом классе, не запускающемся (swift)

Итак, я создаю UIPickerView программно для запуска из UITextField внутри TableCell(это может быть глупой идеей, но пока все равно пойдет с этим).

Я реорганизовал весь код для его собственного класса, чтобы очистить мой UIViewControler:

class SeveritySection {
let pickerToolbar: UIToolbar!
let picker: UIPickerView!
let textField: UITextField!
let tableCell: UITableViewCell!

var pickerOptions = Array<String>()


init() {
    pickerToolbar  = UIToolbar()
    picker = UIPickerView()
    tableCell = UITableViewCell()
    textField = UITextField(frame: CGRectInset(tableCell.contentView.bounds, 15, 0))

}

func setOptions(optionsArray:Array<String>){

    pickerOptions = optionsArray;
}

/// Initalises the toolbar with done on the rhs for picker
/// :param: colour of the toolbar

func createPickerToolbarwith(#colour:UIColor){

    let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
    let doneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: nil,action: Selector("doneButtonAction"))
    let toolbarButtons = [flexSpace, doneButton];

    pickerToolbar.sizeToFit()
    pickerToolbar.setItems(toolbarButtons, animated: true)
    pickerToolbar.backgroundColor = colour

}

func setupTextfield(){
    textField.placeholder = "Choose Severity"
    textField.inputView = picker
    textField.inputAccessoryView = pickerToolbar
    //        self.severityText.keyboardType = UIKeyboardType.NumberPad
    tableCell.addSubview(textField)

}

func setPickerDelegate(viewController: SinnerFormViewController){
    picker.delegate = viewController
    picker.dataSource = viewController

}

func setTextFieldTo(text:String){
    self.textField.text = text
}

func doneButtonAction() {
    textField.resignFirstResponder()
    println("Done pressed")

}

И вот тогда я вызываю в моем UIViewController

var severitySection = SeveritySection()

self.severitySection.setPickerDelegate(self)
self.severitySection.createPickerToolbarwith(colour: UIColor.whiteColor())
self.severitySection.pickerToolbar.delegate = self
self.severitySection.setupTextfield()

но нажатие кнопки "Готово" на панели инструментов счетчика не вызовет никаких событий. Я попытался установить viewcontroller как делегат UIToolbar, но это ничего не изменило. Я считаю, что то, что я сделал, было просто рефакторинг встроенного кода в моем контроллере представления, но я предполагаю, что я что-то пропустил, или что-то неявно определенное больше не существует

1 ответ

Решение

Повторяя то, что Хай Нгиа упомянул в комментариях, если вы установите для цели значение nil, вы фактически отправите сообщение объекту nil, который ничего не делает.

[nil doneButtonAction] фактически неоператор

Другие вопросы по тегам