swift - UIPickerView 上的完成工具栏
问题描述
因此,当单击我打开选择器视图时,我在页面上有一个按钮。我已经用月份填充了选择器视图。我添加了一个工具栏,但每当我尝试选择它时,它只会将选择器视图滚动到顶部。
monthPicker = UIPickerView(frame: CGRect(x: 0, y: self.view.frame.size.height- monthPicker.frame.size.height, width: self.view.frame.size.width, height: monthPicker.frame.size.height))
monthPicker.delegate = self
monthPicker.dataSource = self
monthpickerData = ["January","February","March","April","May","June","July","August","September","October","November","December"]
monthPicker.backgroundColor = UIColor.white
//
let btnDone = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(self.monthdoneButtonAction))
let barAccessory = UIToolbar(frame: CGRect(x: 0, y: 0, width: monthPicker.frame.size.width, height: 44))
barAccessory.barStyle = .default
barAccessory.isTranslucent = false
barAccessory.items = [flexiblespace,btnDone]
monthPicker.addSubview(barAccessory)
解决方案
似乎 UIPickerView 不允许其子级接收触摸事件。如果您将它与 UITextField 一起显示,您可以使用它的 inputView 和 inputAccessoryView 来实现相同的效果。或者,您可以创建一个顶级容器 UIView 来保存工具栏和选择器视图,如下所示:
let picker = UIView(frame: CGRect(x: 0, y: view.frame.height - 260, width: view.frame.width, height: 260))
// Toolbar
let btnDone = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(self.monthdoneButtonAction))
let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(self.cancelClick))
let barAccessory = UIToolbar(frame: CGRect(x: 0, y: 0, width: picker.frame.width, height: 44))
barAccessory.barStyle = .default
barAccessory.isTranslucent = false
barAccessory.items = [cancelButton, spaceButton, btnDone]
picker.addSubview(barAccessory)
// Month UIPIckerView
monthPicker = UIPickerView(frame: CGRect(x: 0, y: barAccessory.frame.height, width: view.frame.width, height: picker.frame.height-barAccessory.frame.height))
monthPicker.delegate = self
monthPicker.dataSource = self
monthpickerData = ["January","February","March","April","May","June","July","August","September","October","November","December"]
monthPicker.backgroundColor = UIColor.white
picker.addSubview(monthPicker)
推荐阅读
- c - C字符串递归堆栈复制或......?
- r - 使用 R 在图像文件中写入评论(元数据)
- spring-boot - 对于名称更复杂的 Spring Boot Starter,是否有命名建议?
- pandas - 熊猫根据另一列替换值条件
- python - SyntaxError:由于命令指令导致的 EOL 错误
- robocopy - robocopy 提供不相等数量的目录但相同数量的文件?
- ios12 - How Do I Hit Test A SubView's Layers?
- javascript - 获取包含天数的数组
- python-3.x - Spacy 中是否有双克或三克功能?
- javascript - 为什么许多标准内置对象实际上是函数时称为对象?