0

UIToolbar回転とカスタムアレンジを処理するカスタムを作成しようとしています。ポートレートモードの場合、一部のbarbuttonitemsは表示されないので、「more」ボタンを追加します。このボタンから、これらのアイテムの小さなビューがポップアップ表示されます。私の問題は、現在の向きが縦向きで、表示されているbarbuttonitem(ポップアップにはない)を選択したときに、ポップアップが開いている場合は閉じたいということです。ポップアップビューのuibarbuttonsのsmae動作で、タップ後にポップアップを閉じるようにします。

だから私はどういうわけかUIBarButtonItemのセレクターを自分のものに置き換えようとしています。そこでは、次のように、すでに定義されているアクションを呼び出します。

-(SEL)extendOriginal:(UIBarButtonItem *) uibb
{
  if (popup) popup.hidden = YES;
  [uibb.target performSelector:uibb.action];
  // return ??  do what ?? 
}

しかし、このカスタムメソッドを呼び出す元のセレクターをターゲットとしてカスタムUIToolbarに置き換えるにはどうすればよいですか?または、この呼び出しで元のセレクターを「拡張」するにはどうすればよいですか?質問が足りない場合は申し訳ありません:)

編集:言い換えると、UIBarButtonItemがタップされたときに、2つの別々のターゲットを持つ2つのアクションが実行されるようにします。

ありがとう!

4

2 に答える 2

0

最後に、私はそれを行う方法を見つけました。最もきれいではありませんが、機能します。

レイアウト メソッド a で作成したカスタム ツールバー クラスでは、UITapGestureRecognizerタップを処理します。cancelsTouchesInViewをfalse に設定し、

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

method ツールバーのサブビューに対してのみ true を返しています。

このようにして、それぞれの元のターゲットとアクションはUIBarButtonItem同じままで、ポップアップを処理するための補足コードはUIGestureRecognizer. もう 1 つの問題は、ツールバーのタップされた項目を区別することでした (タップされたビューtouch.viewは、文書化されていないビューです)。

これが同じ問題を抱えている人に役立つことを願っています。

于 2012-04-16T16:42:29.717 に答える
0

これ-(SEL)extendOriginal:(UIBarButtonItem *) uibbは意味がありません。

バーボタンアイテムのターゲットとアクションをどこかに設定していると思います。idそこでは、1 つの引数またはUIBarButtonItem*セレクターとして任意のメソッドを設定できます。

したがって、コードを次のように変更してみてください

- (void)myMethod:(UIBarButtonItem *) uibb
{
  if (popup) popup.hidden = YES;

  // do cool stuff here
}

ターゲットを次のように設定します

[[UIBarButtonItem alloc] initWithTitle: @"Blabla" style: UIBarButtonItemStylePlain target: self action: @selector(myMethod:)]; 
于 2012-04-12T09:24:19.930 に答える