イベントの変化は -[UIControl addTarget:action:forControlEvents:] を用い、UIControlEventValueChangedを検出するのが一般的です。
但し、ラジオボタンのアナロジーである為でしょうか、現在選択されている Segment を再度選択しても、UIControlEventValueChangedは発火しません。
勿論UISegmentedControlのtouch系イベントは発火するので、それを用いることでtapを検出することが出来ます。
注意すべきは、iOS6以前とiOS7でUISegmentedControlのtap検出タイミングが変化したことです。
iOS6以前は所謂 Touch Down 時点をもって「Segment が選択された」とされていましたが、iOS7からは Touch Up Inside 時点をもっての選択へ変更されました。UIButton の挙動と整合した、という点では、わかりやすくなったと言えるでしょう。
このOSに伴う動作の差などを吸収し、既に選択されているSegmentの再tapを検出するためTPSegmentedControlをgithub で公開しました。
UISegmentedControl に対する非常に小さな hack です。UISegmentedControl をそのまま置き換える形で利用できます。
最も単純にはLibディレクトリへ含まれてるTPSegmentedControl.hとTPSegmentedControl.mを自身のプロジェクトへ追加し、UISegmentedControlを使っていたコードを、TPSegmentedControlへ置き換えれば動作します。
CocoaPods へも対応していますのでPodsでインストールすることも可能です。
% edit Podfile
pod 'TPSegmentedControl'
ご意見、ご感想、pull request等お待ちしております。
0 件のコメント:
コメントを投稿