1

我有一个 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];

但是按钮根本没有响应。

我做错了什么。

4

2 回答 2

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。

做这种事情的更经典的方法是定义一个协议来响应按钮的点击,并使调用视图控制器成为实现协议方法的委托。这样,您只需在创建对象时设置委托,而不必每次都配置按钮。

于 2013-06-19T12:55:44.490 回答
0

If you write :

[header.aboutUs setTarget:self];

AND if your class (I mean here self) implements the function aboutUsPage:, it should work.

于 2013-06-19T12:34:40.740 回答