0

我正在尝试制作一个UIToolbar处理旋转和自定义排列的自定义。当它处于纵向模式时,一些 barbuttonitem 将不可见,因此我添加了一个“更多”按钮,从中弹出一个带有这些项目的小视图。我的问题是,当我当前的方向是纵向并且当我选择一个可见的 barbuttonitem (不在 popup 中)时,如果它打开,我想关闭它。我希望弹出视图中 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

-(SEL)extendOriginal:(UIBarButtonItem *) uibb没有任何意义。

我假设您正在某处设置目标和栏按钮项的操作。在那里,您可以使用一个参数idUIBarButtonItem*作为选择器设置任何方法。

因此尝试将您的代码更改为

- (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 回答
0

最后,我找到了一种方法,虽然不是最漂亮的,但它确实有效。

在我在其布局方法中创建的自定义工具栏类中,UITapGestureRecognizer用于处理点击。我已将 设置cancelsTouchesInView为 false 并在

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

方法我只为我的工具栏的子视图返回 true。

这样每个人的原始目标和动作UIBarButtonItem保持不变,处理我的弹出窗口的补充代码是UIGestureRecognizer. 另一个问题是区分工具栏上的点击项目(点击的视图touch.view是一些未记录的视图,是的),最终我用一些 BOOL iVars 做到了。

我希望这会帮助有同样问题的人。

于 2012-04-16T16:42:29.717 回答