UIDatePicker
과 같은 사용자 지정 선택기 컨트롤을 만들려고하지만 선택기의 모든 논리를 포함하는 다른 데이터 소스를 사용하고 대상 동작 동작을 허용하려고합니다.하위 선택기 UIControl을 사용하여 사용자 지정 선택기를 작성하십시오
이렇게하려면 UIControl
을 서브 클래스 화하고 UIPickerView
을 추가하고 피커 뷰의 데이터 소스를 설정하고 하위 클래스에 위임합니다. 내 문제는 견해의 크기 조정에 있습니다.
모든 기기에서 UIDatePicker
으로 놀았으며 기본 높이는 216이며 기본 너비는 320입니다. 너비를 늘리면 피커 뷰가 늘어나지 않지만 높이를 늘리면 피커 뷰가 늘어납니다. 시스템에 맞추기 위해 피커의 크기를 동일하게 설정하고 싶습니다.
내 서브 클래스에 대해 nib 파일을 만들려고했습니다. 보기 크기를 320x216으로 조정하고 UIPickerView
을 추가하고 IBOutlet
으로 연결했습니다. init?(coder aDecoder: NSCoder)
에 대한 내 구현에서는 데이터 소스와 피커의 위임을 설정했지만 연결 테스트로 인해 내 응용 프로그램을 실행할 때 UIPickerView
은 여전히 nil
입니다.
목표는 init()
을 사용하고 스토리 보드에서 UIDatePicker
과 같이 할 수 있으므로 펜촉을 버리고 코드에 모든 내용을 캡슐화하려고했습니다. UIDatePicker
과 똑같이 동작하도록보기를 설정하려면 어떻게해야합니까?
class FWHeightPicker: UIControl {
let pickerView: UIPickerView
convenience init() {
let size = CGSize(width: 320, height: 216)
let origin = CGPoint(x: 0, y: 0)
let frame = CGRect(origin: origin, size: size)
self.init(frame: frame)
}
override init(frame: CGRect) {
pickerView = UIPickerView(frame: frame)
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
let size = CGSize(width: 320, height: 216)
let origin = CGPoint(x: 0, y: 0)
let frame = CGRect(origin: origin, size: size)
pickerView = UIPickerView(frame: frame)
super.init(coder: aDecoder)
commonInit()
}
func commonInit() {
let topConstraint = NSLayoutConstraint(item: self, attribute: .top, relatedBy: .equal, toItem: pickerView, attribute: .top, multiplier: 1, constant: 0)
let bottomConstraint = NSLayoutConstraint(item: self, attribute: .bottom, relatedBy: .equal, toItem: pickerView, attribute: .bottom, multiplier: 1, constant: 0)
self.addConstraints([topConstraint, bottomConstraint])
pickerView.delegate = self
pickerView.dataSource = self
}
}
extension FWHeightPicker: UIPickerViewDelegate, UIPickerViewDataSource {
// Delegate/Datasource implementations
}