次のコードがあり、doneButton
ハンドラは呼び出されません。どんな考えが間違っているのでしょうか?addTargetがイベントを発生させない
私は、セレクタに多くの異なるフォーマットを試しましたが、パラメータの有無もあります。また、UIView
が手動でuserInteractionEnabled = true
を設定してタッチイベントを受信したことを確認しました。事前に助けてくれてありがとう!
*** UPDATE:私はコードを完全にリファクタリングが、しているが、同じ行動:
マイプロトコル:
import Foundation
protocol CustomDatePickerDelegate {
func dataPickerDone(date: NSDate)
func dataPickerChanged(date: NSDate)
}
私のクラス:
import Foundation
import UIKit
class CustomDatePicker{
var delegate: CustomDatePickerDelegate?
var datePicker : UIDatePicker = UIDatePicker()
func CreateDatePicker(sender: UITextField) {
if (delegate is UIViewController)
{
let _self = delegate as! UIViewController
let _view = UIView(frame: CGRectMake(0, 0, _self.view.frame.width, 220))
let datePickerView : UIDatePicker = UIDatePicker(frame: CGRectMake(0, 40, 0, 0))
datePickerView.datePickerMode = UIDatePickerMode.Date
let _toolbar = UIToolbar()
let _doneButton = UIBarButtonItem(title: "DONE", style: UIBarButtonItemStyle.Done, target: self, action: #selector(CustomDatePicker.doneButton))
_toolbar.translucent = false
_toolbar.sizeToFit()
_doneButton.accessibilityLabel = "DoneToolbar"
let _spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
_toolbar.setItems([_spaceButton, _doneButton], animated: false)
_toolbar.userInteractionEnabled = true
datePickerView.addTarget(self, action: #selector(CustomDatePicker.handleDatePicker), forControlEvents: UIControlEvents.ValueChanged)
_view.addSubview(datePickerView)
_view.addSubview(_toolbar)
sender.inputView = _view
}
}
@objc func handleDatePicker(sender:UIDatePicker) {
delegate?.dataPickerChanged(datePicker.date)
}
@objc func doneButton(){
delegate?.dataPickerDone(datePicker.date)
}
}
方法私はViewControllerからそれを使用します:
let _dataPicker : CustomDatePicker = CustomDatePicker()
_dataPicker.delegate = self
_dataPicker.CreateDatePicker(dataUI)
func dataPickerDone(date: NSDate) {
dataUI.text = DataFormatejada(date)
dataUI.resignFirstResponder()
}
func dataPickerChanged(date: NSDate) {
dataUI.text = DataFormatejada(date)
}
これは、 'UITateFick'にサブビューとして' UIDatePicker'を追加した結果と考えられます。また、問題を引き起こすことはありませんが、これがすべてのクラスであれば、メソッドが 'MyDatePicker'のインスタンスではなく別のビューに日付を追加するように見えるので、UIViewのサブクラスではありません。階層? –
私の問題は解決しなかった、とにかく感謝! – Batiatto
ええと、私はあなたの日付ピッカーが期待どおりに画面に表示されていると仮定し、それを操作して日付を変更できますか? –