我正在尝试制作一个自定义UIToolbar
来处理旋转和自定义排列。当它处于纵向模式时,一些barbuttonitems将不可见,所以我添加了一个“更多”按钮,从中弹出一个带有这些项目的小视图。我的问题是,当我当前的方向是肖像时,当我选择一个可见的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个单独目标的操作。
谢谢!
答案 0 :(得分:0)
这-(SEL)extendOriginal:(UIBarButtonItem *) uibb
没有任何意义。
我假设您正在设置目标和条形按钮项目的操作。在那里,您可以使用一个参数id
或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:)];
答案 1 :(得分:0)
最后,我找到了一种方法来做到这一点,而不是最漂亮,但它确实有效。
在我用布局方法创建的自定义工具栏类中UITapGestureRecognizer
来处理点击。我已将cancelsTouchesInView
设置为false并位于
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
方法我只对工具栏的子视图返回true。
这样每个UIBarButtonItem
的原始目标和动作保持不变,处理弹出窗口的补充代码就是UIGestureRecognizer
的动作。
另一个问题是区分工具栏上的抽头项目(touch.view
中的抽头视图是一些未记录的视图,yay),最后我用一些BOOL iVars做了。
我希望这会帮助有同样问题的人。