2015-02-24 41 views
0

好吧,所以我创建一个UIPickerView以编程方式从TableCell中的UITextField触发(这可能是一个愚蠢的想法,但现在放弃它)。UIBarButtonItem在另一个类中创建的动作没有触发(swift)

我重构了它所有的代码放入了自己的类来简化房间我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

改变目标自我不为零的让doneButton =的UIBarButtonItem(barButtonSystemItem:UIBarButtonSystemItem.Done,目标:无,动作:选择( “doneButtonAction”)) – 2015-02-24 00:16:53

+0

我需要让我的类也从NSObject继承?我在别处做了一些挖掘,以获取我收到的错误消息,我补充说,现在似乎一切正常? “Sibylv1 [61919:5684143] *** NSForwarding:警告:对象0x7fc1d355e700类'Sibylv1.SeveritySection'没有实现methodSignatureForSelector: - 提前出现故障 无法识别的选择器 - [Sibylv1.SeveritySection doneButtonAction] (lldb)” – 2015-02-24 01:17:47

+0

您应该设置目标是你声明didButtonAction方法的类 – 2015-02-24 02:16:45

回答

0

回应什么Huy Nghia在评论中提到,如果您将目标设置为零,你已经有效地发送消息给一个零对象,它什么都不做。

[nil doneButtonAction]实际上是一个无操作

+0

那么,为什么它恰好在viewcontroller里面呢? – 2015-02-24 01:16:46

+1

如果您将目标设置为零,则不起作用。我答应你。可能有一个IBAction连接某个地方在重构中丢失了这篇文章,或者,你没有将目标设置为零。 – 2015-02-24 02:00:07

相关问题