私のアプリでは、現在ユーザーの位置を表示するバーボタンをカスタマイズして、ユーザーがタップして押したままにすると、他の情報を含むサブビューが表示されるようにしようとしています。ただし、送信できるアクションは1つだけのようです。これは間違いなく当てはまりますか、それとも複数のアクションを実行できる方法はありますか?(マップアプリのように)ユーザーの向きの位置を有効にするサブクラスがあることを知っています-どういうわけか同様の機能を実装できますか?
3 に答える
独自のものを作成し、UIButton
必要なすべてのジェスチャ レコグナイザーまたはアクションを追加します。次に、で作成UIBarButtonItem
しinitWithCustomView:
ます。
UIButton *btn = // create button as needed
btn.showsTouchWhenHighlighted = YES; // keep the "glow" effect
[btn addTarget:self action:@selector(someSelector) forControlEvents:someEvent];
// repeat as needed for different events/selectors
// or add gesture recognizers
UIBarButtonItem *btnItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
他のコメントが言うように:「長押し」ジェスチャ認識機能をネイティブ バー ボタンに追加することはできません。これには 2 つの方法があります。
1) ビュー階層でボタンを表す UIView を見つけ、それにジェスチャ認識機能を追加します。詳細はこちら。これは非常に簡単で、数行のコードで実行できますが、ビューの内部構造が将来変更された場合に壊れる可能性があります。
2) UIButton をナビゲーション バー ボタンにドラッグするか (Interfacebuilder)、プログラムで customView プロパティを設定して、ナビゲーション バー ボタンの customView を設定します。次に、その UIButton に navBarButton の外観を与え、ジェスチャ認識機能を追加する必要があります。
UIBarButtonItems は 1 つのイベントのみを送信します。独自のカスタム コントロールを作成し、Gesture Recognizer を追加してタップと長押しを認識し、カスタム コントロールでバー ボタン項目を作成する必要があります。