addTarget用于另一个类

时间:2013-06-19 12:00:01

标签: ios uibutton

我有一个UIView,它有一些我需要添加动作的按钮。

我试过这个:

 HeaderViewController * header = [[HeaderViewController alloc]initWithNibName:@"HeaderViewController" bundle:[NSBundle mainBundle]];

[header.aboutUs addTarget:self action:@selector(aboutUsPage:) forControlEvents:UIControlEventTouchUpInside];
[header.MyLibrary addTarget:self action:@selector(myLibraryPage:) forControlEvents:UIControlEventTouchUpInside];
[self.tableView addParallaxWithView:header.view andHeight:229];

但按钮根本没有响应。

我做错了什么。

2 个答案:

答案 0 :(得分:1)

就是这样,您正在创建视图控制器,然后为被视为视图控制器属性的按钮设置目标和操作。

我怀疑如果您在设置目标和操作之前记录或设置断点然后单步执行,则按钮将为零。

视图控制器懒洋洋地加载视图。因此,虽然您已经创建了视图控制器,但您还没有要求它加载它的视图。所以按钮还没有从笔尖创建。因此属性为零,而不是设置目标动作。

修复它的第一个选择是移动最后一行,使其如下所示:

[self.tableView addParallaxWithView:header.view andHeight:229];
[header.aboutUs addTarget:self action:@selector(aboutUsPage:) forControlEvents:UIControlEventTouchUpInside];
[header.MyLibrary addTarget:self action:@selector(myLibraryPage:) forControlEvents:UIControlEventTouchUpInside];

这样你就会调用视图,它会初始化它,之后按钮参数不应该是nil。

执行此类操作的更经常的方法是定义用于响应按钮上的点击的协议,并使调用视图控制器成为实现协议方法的委托。这样,您只需在创建对象时设置委托,而不必每次都配置按钮。

答案 1 :(得分:0)

如果你写:

[header.aboutUs setTarget:self];

如果你的类(我的意思是我自己)实现了函数aboutUsPage:,它应该可以工作。