我在 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.//..
}
答案 0 :(得分:2)
假设此方法位于导航控制器中的视图控制器中,您只需执行以下操作:
UINavigationController *navigationController = self.navigationController;
问题 - 为什么你的按钮处理程序是一个类方法?只有在使按钮处理程序成为正确的实例方法时,此解决方案才有效。
如果您真的需要将目标作为类方法,则可以从按钮的target
属性获取对视图控制器的引用:
UIViewController *target = barButtonItem.target;
UINavigationController *navigationController = target.navigationController;
更新
基于以下事实:在这种情况下,按钮的目标不是视图控制器,此解决方案不起作用。
答案 1 :(得分:0)
我是否正确理解您是将它作为一种类方法,因为它用于来自不同视图控制器的各种按钮?
如果是这样,解决方法是让每个按钮向其自己的UIViewController中的方法发送目标/操作消息,然后让该方法调用公共类方法,将UINavigationController作为参数传递。
UINavigationController *navController = self.navigationController;
[<classObject> buttonPressed:(UIBarButtonItem *)barButtonItem
fromNavigationcontroller:(UINavigationController *)navController;
您显然需要重新编写类方法以接受其他参数:
+ (void)buttonPressed:(UIBarButtonItem *)barButtonItem
fromNavigationcontroller:(UINavigationController *)navController{