将self.navigationController作为UI按钮的addTarget中的参数传递

时间:2014-03-19 07:48:14

标签: ios objective-c

我已经以编程方式添加了UIButton,我需要addTarget。选择器操作在另一个类中。我使用以下代码来执行此操作。

UIButton *homeBtn = [[UIButton alloc] initWithFrame:CGRectMake(10,5,32,32)];
homeBtn.backgroundColor = [UIColor greenColor];
[homeBtn addTarget:[myClass class] action:@selector(ButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubView:homeBtn];

+(void)ButtonTapped:(id)sender{
     NSLog(@"here");
}

这很好用。但我需要在类函数中使用pushViewController,我需要将self.navigationController传递给函数。

我尝试使用homeBtn.nav = self.navigationController; 但这会产生错误'Property nav not found on object of type UIButton *'

任何人都可以帮助我并告诉我如何将self.navigationController传递给班级功能。

此致

NEHA

2 个答案:

答案 0 :(得分:0)

不幸的是,这是不可能的。您正在创建静态(又名)方法,这由方法名称+前面的+(void)ButtonTapped:(id)sender表示。在这些方法中,您无法访问实例变量或对象的属性,因为它们是在上调用而不是在对象上调用。

不是让一切都变得静止,而是尝试为你想要实现的目标创建实例常规方法。一个例子可能是:

[homeBtn addTarget:myObject action:@selector(ButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubView:homeBtn];

-(void)ButtonTapped:(id)sender{
     NSLog(@"here");
}

此处,myObject应该是类myClass的实例。

有了这个,你可以访问调用ButtonTapped方法的对象的实例变量,这样你就可以使用self.navigationController

PS。 iOS中的命名约定是这样的,您可以使用小写字母和带有大写字母的类名称来启动方法名称,因此对于您来说,它将是MyClass-(void)buttonTapped

答案 1 :(得分:0)

如果您希望能够使用以下行:

homeBtn.nav = self.navigationController;

您可以继承UIButton并将属性添加到其中。

@interface CustomButton : UIButton

@property (strong, nonatomic) UINavigationController *nav;

@end