2

我在barButtonItem 处理程序方法中,我需要对导航控制器的引用。但我没有存储导航控制器的引用。任何想法?

#import "ReportViewController.h"
#import "CenterViewAnimationUtility.h"

@implementation ReportViewController

- (void)viewDidLoad
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button addTarget:[CenterViewAnimationUtility class] action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
}

//next file ..

#import "CenterViewAnimationUtility.h"

@implementation CenterViewAnimationUtility

+ (void)buttonPressed:(UIBarButtonItem *)barButtonItem {

    UINavigationController *navigationController = barButtonItem.//..
}
4

2 回答 2

2

假设此方法位于导航控制器中的视图控制器中,您可以简单地执行以下操作:

UINavigationController *navigationController = self.navigationController;

问题 - 为什么您的按钮处理程序是类方法?此解决方案仅在您将按钮处理程序设置为适当的实例方法时才有效。

如果你真的需要目标是一个类方法,你可以从按钮的target属性中获取对视图控制器的引用:

UIViewController *target = barButtonItem.target;
UINavigationController *navigationController = target.navigationController;

更新:

基于在这种情况下按钮的目标不是视图控制器这一事实,该解决方案不起作用。

于 2013-10-26T03:24:58.720 回答
0

我是否正确理解您将其作为类方法,因为它用于来自不同视图控制器的各种按钮?

如果是这样,解决方法是让每个按钮将目标/操作消息发送到其自己的 UIViewController 中的方法,然后让该方法调用公共类方法,将 UINavigationController 作为参数传递。

UINavigationController *navController = self.navigationController;
[<classObject> buttonPressed:(UIBarButtonItem *)barButtonItem 
   fromNavigationcontroller:(UINavigationController *)navController;

您显然需要重写类方法以接受附加参数:

    + (void)buttonPressed:(UIBarButtonItem *)barButtonItem 
      fromNavigationcontroller:(UINavigationController *)navController{
于 2013-11-05T10:34:59.277 回答