2016-10-17 4 views
-1

私はSwift 2.2を使用していると思うXcode 7.3に簡単なiOSアプリケーションを作成しています。私は、UIToolParをUITextフィールドでUITatePickerを使用しようとしています。何らかの理由でCancelボタンをタップすると、コントローラのdatePickerCancelledメソッドが呼び出されないようです。すべてがうまく表示されます(ピッカー、ボタンなど)が、イベントは発生しません。私はセレクタをUIBarButtonItemに追加するいくつかのバリエーションを試しましたが、何も動作していないようです。このコードからわかるように、これはかなり簡単なケースなので、なぜこのように難しいのでしょうか?ありがとうございました。UIButtonBarItemがセレクタを起動しないようです

var datePickerToolbar = UIToolbar() 

これはゼロサイズのツールバーにつながる:

override func viewDidLoad() { 
     super.viewDidLoad() 

     var datePicker = UIDatePicker() 
     var datePickerToolbar = UIToolbar() 
     let doneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: nil, action: nil) 
     let cancelButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Cancel, target: self, action: #selector(datePickerCancelled)) 
     let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 


     datePickerToolbar.setItems([cancelButton,flexSpace, doneButton], animated: true) 
     datePicker.userInteractionEnabled = true 
     cancelButton.enabled = true 
     self.dateField.inputView = datePicker 
     self.dateField.inputAccessoryView = datePickerToolbar 
    } 

    func datePickerCancelled(){ 
     self.datePicker.resignFirstResponder(); 

    }` I 
+0

はおそらく、あなたはこれを意味しました。ピッカーの上にあるボタンがうまく表示されていても、イベントハンドラを呼び出すことができませんでした。次のコードを追加すると私の問題が解決しましたself.datePickerToolbar.frame = CGRectMake(0、0、self.view.frame.size.width、44) – Alfawan

答えて

0

問題は、このラインです。 [キャンセル]ボタンは表示されますが、ツールバーのサイズがゼロであるため、スーパービューの外にあります。つまり、ツールバーです。

スーパービュー以外のビューはタップできません。

ツールバーのclipsToBoundstrueに設定してアプリを実行すると簡単に確認できます。ツールバーの外には表示されなくなったため、キャンセルボタンが表示されなくなりました。その行が何を起こさないように、

func datePickerCancelled(){ 
    self.datePicker.resignFirstResponder(); 
} 

あなたの日付ピッカーは決して最初の応答者だった:イベント火をした場合


、あなたのdatePickerCancelled機能はまだ何もしないう発生する。マットは指摘し、私は私のツールバーの高さを設定することができなかったとして

func datePickerCancelled(){ 
    self.dateField.resignFirstResponder(); 
} 
+0

ありがとうございました。はい、私はデバッガを認識しており、self.dateField.resignFirstResponder()にブレークポイントを設定します。それは決してそれを得ることはありません。だからこそ私はそのような主張を安全に行うことができます。 – Alfawan

+0

合意。まだ私の質問に答えることはできませんが、あなたは正しいです。 – Alfawan

+0

驚くばかり!それはうまくいった。どうもありがとうございます。あなたはそれについてあまり気楽にする必要はありません参照してください。私たちは皆どこかで始まり、自分自身と同じくらい経験の浅い私たちと一緒に小さな患者が遠くまで行くことができることを忘れないでください。 – Alfawan

関連する問題