检测从其他 ViewController 中点击了哪个 UIBarButton

Posted

技术标签:

【中文标题】检测从其他 ViewController 中点击了哪个 UIBarButton【英文标题】:Detect which UIBarButton was tapped from other ViewController 【发布时间】:2013-03-25 18:12:12 【问题描述】:

我有 4 个 UIBarButtons,点击时会显示 PopoverController。根据点击的按钮,我必须显示不同的弹出框内容,这必须在 PopoverController viewDidLoad 方法中完成。

这是我处理 UIBarButton 所点击的弹出框的方式。在 (VC1.m) 中

[PopoverController presentPopoverFromBarButtonItem:[self.navigationItem.rightBarButtonItems objectAtIndex:[self.navigationItem.rightBarButtonItems count] -1]
                                 permittedArrowDirections:UIPopoverArrowDirectionAny
                                                 animated:YES];

我想在 viewDidLoad 中添加条件,(PopoverController.m)

- (void)viewDidLoad 
   [super viewDidLoad];
   if ([super.navigationItem.rightBarButtonItems objectAtIndex:[self.navigationItem.rightBarButtonItems count] -1]) 
      // Trigger method# 1
    
    else 
      // Trigger method# 2
    

【问题讨论】:

你有没有想过把它作为你的 PopoverController 上的自定义 init: 方法的参数?这样你设置它-viewDidLoad被调用。 谢谢盖奇。不,我没有想过。你能解释一下吗? 【参考方案1】:

我建议为您将要使用的初始选项卡状态添加一个属性。基本上:

@property NSInteger tabState;

然后你可以在初始化后立即设置,也可以在 init 函数中设置。

假设您上面的代码中的PopoverController 是您在某处实例化的UIPopoverController 的子类,您可以将init 函数(通常是– initWithContentViewController: 更改为– initWithContentViewController:tabState:,然后在您对 init 的调用:

– initWithContentViewController:(UIViewController*)vc tabState:(NSInteger)newTabState

     self = [super initWithContentViewController: vc];
     if (self) 
         self.tabState = newTabState;
     
     return self;

然后在您的-viewDidLoad 方法中,您只需触发您的self.tabState,您就可以获得状态信息,而无需与先前视图紧密绑定。

【讨论】:

显然我的代码有 initwithContentViewController 但 PopoverController 不是 PopoverController 的子类,因此我不能在那里放置方法。我还能把自定义方法放在哪里? 您始终可以将属性添加到您的类并在创建实例后设置它。我的原始答案中也提到了这一点。

以上是关于检测从其他 ViewController 中点击了哪个 UIBarButton的主要内容,如果未能解决你的问题,请参考以下文章

如何检测快速点击了哪个图像

将所选图像从 uiscrollView 传递到其他 viewController

如何从viewcontroller转换到其他?

从 View 与 ViewController 对话

从使用 MessageKit 创建的 ChatViewController 推送其他 ViewController

从其他 ViewController 中删除带有标签的视图