2013-03-25 68 views
1

我有4个UIBarButtons,当点击时显示PopoverController。根据点击哪个按钮,我必须显示不同的弹出内容,这必须在PopoverController的viewDidLoad方法中完成。检测哪个UIBarButton从其他ViewController被点击

这是我如何处理从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 
    } 
} 
+0

你有没有想过只是让这一个参数自定义'在它:'你的PopoverController的方法?这样你就可以调用'-viewDidLoad'。 – gaige 2013-03-25 18:59:23

+0

感谢gaige。不,我没有想过这个。你能解释一下吗? – 2013-03-25 19:34:52

回答

1

我建议增加一个属性,你会成为初始选项卡状态使用。基本上如下:

@property NSInteger tabState; 

然后你可以在初始化之后或者在init函数中设置它。

假设PopoverController在上面的代码是你被实例化某处的UIPopoverController一个子类,你可以更改初始化函数(通常– initWithContentViewController:– initWithContentViewController:tabState:,然后通过在你的调用初始化期间的标签状态:

-viewDidLoad方法
– initWithContentViewController:(UIViewController*)vc tabState:(NSInteger)newTabState 
{ 
    self = [super initWithContentViewController: vc]; 
    if (self) { 
     self.tabState = newTabState; 
    } 
    return self; 
} 

然后,您可以直接触发了你self.tabState的,你有没有紧密结合现有视图的状态信息。

+0

谢谢我现在正在处理它。 – 2013-03-25 19:59:44

+0

显然我的代码有initwithContentViewController,但PopoverController不是PopoverController的子类,因此我不能在那里放置一个方法。我还能在哪里放置自定义方法? – 2013-03-25 21:37:40

+0

您可以随时将该属性添加到您的课程并在创建实例后进行设置。我的原始答案也提到了这一点。 – gaige 2013-03-25 22:19:52