【问题标题】:How to code customized pickers in a class of UIView?如何在 UIView 类中编写自定义选择器?
【发布时间】:2015-12-21 14:33:52
【问题描述】:
我想编写一个包含两个选择器的视图(弹出窗口),以便输入带有两个单独选择器视图的周(一年)和年份。首先,我首先创建一个新类作为 UIView 的子类。接下来,我编写了应该弹出的窗口,以防它被调用。
现在我遇到了问题,我不能用数据填充我的两个选择器视图,因为 UIView 不支持 UIPickerViewDataSource。
我该如何解决这个问题,因为我只想将它显示为一个小弹出窗口而不是打开整个 UIViewController。
【问题讨论】:
标签:
ios
swift
uiview
uipickerview
【解决方案1】:
它应该是一个控制器,显示在弹出窗口中。
presenter 应该是 UIPopoverPresentationControllerDelegate 并具有重写的方法以支持 iPhone 上的弹出框(默认情况下,它们将以模态方式呈现)。
extension ItemViewController: UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return .None
}
}
使用此方法展示您的选择器控制器:
func instantiatePicker(picker: UIViewController, sender: UIView) {
picker.modalPresentationStyle = .Popover
let ppc = picker.popoverPresentationController!
ppc.delegate = self
ppc.permittedArrowDirections = .Any
ppc.sourceView = sender
ppc.sourceRect = sender.bounds
presentViewController(picker, animated: true, completion: nil)
}
在您的选择器控制器中覆盖此属性以根据您的需要调整弹出框大小,如下所示:
override var preferredContentSize: CGSize {
get {
return CGSize(width: datePicker.bounds.width, height: datePicker.bounds.height + anotherPicker.bounds.height)
}
set {
super.preferredContentSize = newValue
}
}