我解决了它创建一个自定义 ixPopoverBarButtonItem,它可以触发搜索或消除显示的弹出窗口。
我的工作:我切换按钮的操作和目标,因此它会触发搜索或处理当前显示的弹出窗口。
我花了很多时间来寻找这个解决方案,我不想因为切换动作而获得赞誉。将代码放在自定义按钮中是我尽量减少样例代码在我看来的方法。
在情节提要中,我将BarButtonItem的类定义为自定义类:

然后,我将由segue创建的弹出窗口传递给该prepareForSegue:sender:方法中我的自定义按钮实现:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender  
{
    if ([segue.identifier isEqualToString:@"myPopoverSegue"]) {
        UIStoryboardPopoverSegue* popSegue = (UIStoryboardPopoverSegue*)segue;
        [(ixPopoverBarButtonItem *)sender showingPopover:popSegue.popoverController];
    }
}
顺便说一句...由于我有多个按钮触发弹出窗口,因此我仍然必须保留当前显示的弹出窗口的引用,并在使新的弹出窗口可见时将其关闭,但这不是您的问题...
这是我实现自定义UIBarButtonItem的方法:
...接口: 
@interface ixPopoverBarButtonItem : UIBarButtonItem
- (void) showingPopover:  (UIPopoverController *)popoverController;
@end
...并暗示: 
#import "ixPopoverBarButtonItem.h"
@interface ixPopoverBarButtonItem  ()
@property (strong, nonatomic) UIPopoverController *popoverController;
@property (nonatomic)         SEL                  tempAction;           
@property (nonatomic,assign)  id                   tempTarget; 
- (void) dismissPopover;
@end
@implementation ixPopoverBarButtonItem
@synthesize popoverController = _popoverController;
@synthesize tempAction = _tempAction;
@synthesize tempTarget = _tempTarget;
-(void)showingPopover:(UIPopoverController *)popoverController {
    self.popoverController = popoverController;
    self.tempAction = self.action;
    self.tempTarget = self.target;
    self.action = @selector(dismissPopover);
    self.target = self;
}    
-(void)dismissPopover {
    [self.popoverController dismissPopoverAnimated:YES];
    self.action = self.tempAction;
    self.target = self.tempTarget;
    self.popoverController = nil;
    self.tempAction = nil;
    self.tempTarget = nil;
}
@end
ps:我是ARC的新手,所以我不确定我是否在这里泄漏。请告诉我我是否...