检测从其他 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