代码之家  ›  专栏  ›  技术社区  ›  Mike Li

在另一个类中创建的UIBarButtonItem操作未激发(swift)

  •  0
  • Mike Li  · 技术社区  · 10 年前

    好的,所以我以编程方式创建了一个UIPickerView,以从TableCell内的UITextField触发(这可能是一个愚蠢的想法,但现在还是让我们继续吧)。

    我将它的所有代码重构为它自己的类,以清理我的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 回复  |  直到 10 年前
        1
  •  0
  •   Roderic Campbell    10 年前

    与Huy Nghia在评论中提到的一样,如果你将目标设置为nil,那么你实际上已经向nil对象发送了一条消息,但这没有任何作用。

    [nil doneButtonAction] 实际上是不可行的