【问题标题】:Replace or extend UIBarButtonItem selector替换或扩展 UIBarButtonItem 选择器
【发布时间】:2012-04-12 08:48:04
【问题描述】:

我正在尝试制作一个自定义 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 个单独目标的操作。

谢谢!

【问题讨论】:

    标签: iphone ios selector uibarbuttonitem uitoolbar


    【解决方案1】:

    这个-(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:)]; 
    

    【讨论】:

    • 是的,我知道这没有意义 :) 我将 UIBarButtonItems 添加到具有我的自定义工具栏之一的视图控制器中。我的问题是我想透明地实现它,因此定义按钮操作的其他视图控制器应该没有此实现细节的代码(顺便说一句,目前它有,但这就是为什么我需要一个自定义工具栏来自动处理这个问题。
    • 编辑了我的问题,更准确地说。
    【解决方案2】:

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

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

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

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

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

    我希望这能帮助遇到同样问题的人。

    【讨论】:

      猜你喜欢
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多