Post

Replies

Boosts

Views

Activity

Reply to UIPickerView button not worked
Thank you Claude31 for your attention. Here is full code of BNPickerView. swift // // BNPickerView.swift // // import UIKit class BNPickerView: UIView { enum doneMode: Int { case done = 0 case save = 1 } var doneStyle: doneMode = .done let picker: UIPickerView = UIPickerView(forAutoLayout: ()) let toolbar = UIToolbar(forAutoLayout: ()) let doneButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePushed(_:))) let saveButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .save, target: self, action: #selector(donePushed(_:))) let cancelButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancelPushed(_:))) let backgroundView: UIView = UIView(forAutoLayout: ()) let toggle: BNToggleView = BNToggleView(frame: CGRect(x: 0, y: 0, width: 151, height: 32)) var data:[[String]] = [[]] var doneResultHandler:([String],[Int])-() = {_,_ in } func setData(data:[[String]], doneResultHandler:@escaping ([String],[Int])-()){ self.parentViewController()?.view.endEditing(true) self.data = data self.doneResultHandler = doneResultHandler backgroundView.isUserInteractionEnabled = true backgroundView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(dismissView(sender:)))) self.picker.dataSource = self self.picker.delegate = self self.addSubview(backgroundView) backgroundView.autoPinEdge(toSuperviewEdge: .top) backgroundView.autoPinEdge(toSuperviewEdge: .left) backgroundView.autoPinEdge(toSuperviewEdge: .right) backgroundView.backgroundColor = UIColor.black.withAlphaComponent(0.7) self.addSubview(toolbar) toolbar.autoPinEdge(toSuperviewEdge: .left) toolbar.autoPinEdge(toSuperviewEdge: .right) let done = self.doneStyle == .done ? doneButton : saveButton toolbar.setItems([cancelButton, UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil), done], animated: true) toolbar.addSubview(toggle) toggle.configureForAutoLayout() toggle.autoAlignAxis(toSuperviewAxis: .horizontal) toggle.autoAlignAxis(toSuperviewAxis: .vertical) toggle.autoSetDimensions(to: CGSize(width: 151, height: 32)) toggle.alpha = 0 self.addSubview(picker) picker.autoPinEdge(toSuperviewSafeArea: .left) picker.autoPinEdge(toSuperviewSafeArea: .right) picker.autoPinEdge(toSuperviewEdge: .bottom) picker.autoSetDimension(.height, toSize: 315) picker.backgroundColor = UIColor.white toolbar.autoPinEdge(.bottom, to: .top, of: picker) backgroundView.autoPinEdge(.bottom, to: .top, of: toolbar) } override func draw(_ rect: CGRect) { self.alpha = 0.0 UIView.animate(withDuration: 0.2, animations: { self.alpha = 1.0 }, completion: {_ in }) } @objc func donePushed(_ sender: UIBarButtonItem) { var out:[String] = [] var outIndex:[Int] = [] for index in 0..data.count{ outIndex.append(picker.selectedRow(inComponent: index)) out.append(data[index][picker.selectedRow(inComponent: index)]) } self.doneResultHandler(out,outIndex) dismiss() return } @objc func cancelPushed(_ sender: UIBarButtonItem) { dismiss() } @objc func dismissView(sender:UIView){ dismiss() } func dismiss(){ UIView.animate(withDuration: 0.2, animations: { self.alpha = 0.0 }, completion: {_ in self.removeFromSuperview() }) } } extension BNPickerView: UIPickerViewDataSource{ func numberOfComponents(in pickerView: UIPickerView) - Int { return data.count } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) - Int { return data[component].count } } extension BNPickerView: UIPickerViewDelegate{ func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) - String? { return data[component][row] } func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) - CGFloat { return 40 } }
Topic: UI Frameworks SubTopic: UIKit Tags:
May ’21
Reply to UIPickerView button not worked
I cannot reproduce this phenomenon. Here is my customer's clip. language https://drive.google.com/file/d/1lr4T0G6L4cVyRMpgygdhDYg52crnTOvL/view?usp=sharing Cancel button has only code like this swift @objc func cancelPushed(_ sender: UIBarButtonItem) { dismiss() } func dismiss(){ UIView.animate(withDuration: 0.2, animations: { self.alpha = 0.0 }, completion: {_ in self.removeFromSuperview() }) } Thanks.
Topic: UI Frameworks SubTopic: UIKit Tags:
May ’21