swift 4中的自定义Datepicker标签

问题描述 投票:0回答:1

我有一个集合视图,其中标题用于header.i想要在单击此标签时显示日期选择器。已创建自定义日期选择器标签但是我不知道如何在我的控制器中使用此datepicker标签作为当前点击日期标题标签时不显示datepicker。

class DatePickerLabel: UILabel {

private let _inputView: UIView? = {
    let picker = UIDatePicker()
    return picker
}()

private let _inputAccessoryToolbar: UIToolbar = {
    let toolBar = UIToolbar()
    toolBar.barStyle = UIBarStyle.default
    toolBar.isTranslucent = true
    toolBar.sizeToFit()
    return toolBar
}()

override var inputView: UIView? {
    return _inputView
}

override var inputAccessoryView: UIView? {
    return _inputAccessoryToolbar
}

required init() {
    super.init(frame: CGRect.zero)

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

    _inputAccessoryToolbar.setItems([ spaceButton, doneButton], animated: false)

    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(launchPicker))
    self.addGestureRecognizer(tapRecognizer)
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}



override var canBecomeFirstResponder: Bool {
    return true
}

@objc private func launchPicker() {
    becomeFirstResponder()
}

@objc private func doneClick() {
    resignFirstResponder()
}
}

自定义标题类: -

class DetailHeader : UICollectionReusableView
{

@IBOutlet weak var paramName : UILabel!

@IBOutlet weak var paramDate : DatePickerLabel!

}

我的viewController代码 -

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    if (kind == UICollectionElementKindSectionHeader){
    let sectionHeader = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerreuseIdentifier, for: indexPath) as! DetailHeader
    sectionHeader.paramName.text = selectedParam?.name
        sectionHeader.paramDate.text = dateToString(date: stringToDate(strdate: (detailList?.date)!))
        sectionHeader.paramDate = DatePickerLabel()
    return sectionHeader
}
}
ios xcode swift4
1个回答
0
投票

您尚未在DatePickerLabel中启用用户互动。 isUserInteractionEnabled的默认值是false。所以在你的DatePickerLabel中覆盖它

override var isUserInteractionEnabled: Bool {
    return true
}

你的init也从未被召唤过。因为在Nib / Storyboard的情况下,init(coder aDecoder: NSCoder)被调用。将您的代码从init移动到init(coder aDecoder: NSCoder),它将开始工作。

© www.soinside.com 2019 - 2024. All rights reserved.