动态向UIBarButtonItem添加动作Swift 4

时间:2018-06-21 15:49:13

标签: swift xcode uibarbuttonitem

let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(buttonClicked(sender:)))

@objc func buttonClicked(sender: UIBarButtonItem) {
    print("Hello")
}

这是我的UIBarButton的代码,但是当我单击它时,它不会打印“ Hello”,这可能是问题所在吗?

编辑:这是我的viewcontroller 它只是控制一个按钮,单击该按钮时将显示带有控件的微调器,但是正如我之前所说,工具栏上的按钮不起作用

class FilterViewController: UIViewController {

var search: Search?

let categoriesSpinnerDelegate = CategoriesPickerDelegate()

@IBOutlet weak var generalSpinner: UIPickerView!
@IBOutlet weak var categoriesButton: UIButton!
@IBOutlet weak var categoryRow: UIView!

var doneButton: UIBarButtonItem?

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.topViewController?.title = "Filtri"

    // Set border and click action
    self.categoryRow.layer.borderWidth = 1
    self.categoryRow.layer.borderColor = Raccoltacase.lightGray.cgColor
    self.categoryRow.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.buttonClicked(sender:))))

    // Create toolbar and attach it to pickerView
    let toolBar = UIToolbar()
    toolBar.barStyle = UIBarStyle.default
    toolBar.isTranslucent = true
    //toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
    toolBar.sizeToFit()

    self.doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(buttonClicked(sender:)))
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
    let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: nil)

    toolBar.setItems([cancelButton, spaceButton, doneButton!], animated: false)
    toolBar.isUserInteractionEnabled = true

    generalSpinner.addSubview(toolBar)

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func categoriesButtonClick(_ sender: UIButton) {
    self.generalSpinner.showsSelectionIndicator = true
    self.generalSpinner.dataSource = categoriesSpinnerDelegate
    self.generalSpinner.delegate = categoriesSpinnerDelegate
    self.generalSpinner.isHidden = false
}

@objc func buttonClicked(sender: UIBarButtonItem) {
    print("Hello")
}
}

Screen

2 个答案:

答案 0 :(得分:0)

假设您有时显示选择器(并在用户按下完成按钮时将其关闭),这是我的解决方案:

  1. 向情节提要中的视图添加 UITextField (并使tintColor透明(clearColor))

  2. UIToolbar 作为 inputAccessoryView 添加到 UITextField

  3. UIPickerView 作为 inputView 添加到工具栏(另请参见下面的注释)

下面是示例代码:

override func viewDidLoad() {
    super.viewDidLoad()
    textField.inputView = generalSpinner
    textField.inputAccessoryView = getToolbar()
}

func getToolbar() -> UIToolbar {
    let toolBar = UIToolbar(frame:         CGRect(x: 0, y: 0, width: self.view.frame.width, height: 40))
    toolBar.barStyle = UIBarStyle.default
    toolBar.isTranslucent = true
    self.doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(buttonClicked(sender:)))
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
    let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: nil)

    toolBar.setItems([cancelButton, spaceButton, doneButton!], animated: false)
    toolBar.isUserInteractionEnabled = true

    return toolBar
}

注意:如果UIPickerView已经在情节提要中(或另一个视图的子视图),请确保在viewDidLoad的第一行中将其删除(如下所示):

override func viewDidLoad() {
  super.viewDidLoad()
  generalSpinner.removeFromSuperview()
  textField.inputView = generalSpinner
  textField.inputAccessoryView = getToolbar()
}

答案 1 :(得分:0)

已解决 当我使用public AboutPage() { this.webView.Navigating += this.NavigatingEvent; } private void NavigatingEvent(object sender, WebNavigatingEventArgs e) { if (e.Url.Contains("bottom") || e.Url.Contains("about:blank")) { e.Cancel = true; // ACTION WHEN BOTTOM IS REACHED HERE } } 时,工具栏位于pickerview的后面,因此无法单击。我解决了这个问题,并使用pickerView.addSubView(toolbar)

从情节提要中手动添加了工具栏