Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 更换或扩展UIBarButtonItem选择器_Iphone_Ios_Selector_Uibarbuttonitem_Uitoolbar - Fatal编程技术网

Iphone 更换或扩展UIBarButtonItem选择器

Iphone 更换或扩展UIBarButtonItem选择器,iphone,ios,selector,uibarbuttonitem,uitoolbar,Iphone,Ios,Selector,Uibarbuttonitem,Uitoolbar,我正在尝试制作一个自定义的UIToolbar,它处理旋转和自定义排列。当它处于纵向模式时,一些barbuttonitems将不可见,因此我添加了一个“更多”按钮,从中弹出一个包含这些项目的小视图。我的问题是,当我当前的方向是纵向时,当我选择一个可见的按钮(不在弹出窗口中)时,如果弹出窗口打开,我想关闭它。我希望popupview中uibarbuttons的smae行为在点击后关闭弹出窗口 因此,我试图用我自己的选择器替换UIBarButtonItem的选择器,我在其中调用已经定义的操作,如下所示

我正在尝试制作一个自定义的
UIToolbar
,它处理旋转和自定义排列。当它处于纵向模式时,一些barbuttonitems将不可见,因此我添加了一个“更多”按钮,从中弹出一个包含这些项目的小视图。我的问题是,当我当前的方向是纵向时,当我选择一个可见的按钮(不在弹出窗口中)时,如果弹出窗口打开,我想关闭它。我希望popupview中uibarbuttons的smae行为在点击后关闭弹出窗口

因此,我试图用我自己的选择器替换UIBarButtonItem的选择器,我在其中调用已经定义的操作,如下所示:

-(SEL)extendOriginal:(UIBarButtonItem *) uibb
{
  if (popup) popup.hidden = YES;
  [uibb.target performSelector:uibb.action];
  // return ??  do what ?? 
}
但是,如何用自定义UIToolbar作为其目标来替换调用此自定义方法的原始选择器?或者,我如何通过此调用“扩展”原始选择器?抱歉,如果问题是蹩脚的:)

编辑:换句话说,我希望在点击UIBarButtonItem时执行两个操作,其中有两个单独的目标

谢谢

这个
-(SEL)extendoroginal:(uibarbuttonite*)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:)]; 

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

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

-(BOOL)手势识别器:(UIGestureRecognitor*)手势识别器应接受触摸:(UITouch*)触摸
方法我只为工具栏的子视图返回true

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


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

是的,我知道这没有意义:)我正在一个viewcontroller中添加uiBarButtonims,它有我的一个自定义工具栏。我的问题是我想透明地实现它,因此定义按钮操作的另一个viewcontroller应该没有此实现细节的代码(顺便说一句,目前它有,但这就是为什么我没有自定义工具栏来自动处理此问题。更准确地说,编辑了我的问题)。