我有UIButton
的子类:
@interface MyButton : UIButton
- (IBAction) buttonPressed:(id)sender;
@end
@implementation MyButton
- (void)awakeFromNib
{
NSLog(@"awake from nib");
}
- (IBAction) buttonPressed:(id)sender
{
NSLog(@"button pressed");
}
@end
我在父xib中添加了一个按钮,将其类设置为MyButton,并将其操作连接到First Responder
的方法buttonPressed
。
当我启动一个应用程序并使用我的按钮加载我的父xib时,调用来自MyButton类的awakeFromNib
。但是当我按下按钮时,没有任何反应。我原以为我会调用buttonPressed
类的方法MyButton
。
我认为,我的按钮的视图是响应者链中的第一个响应者,但显然我做错了。
你能提出一些建议吗?
答案 0 :(得分:3)
根据您使用按钮的操作而定 - 不需要创建子类。
以下是一些代码如何创建一个触发方法的简单按钮:
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButton setFrame:CGRectMake(10, 10, 100, 30)];
[myButton setTitle:@"Title" forState:UIControlStateNormal];
[myButton addTarget:self action:@selector(myMethod:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:myButton];
当用户触摸按钮内部(轻击按钮)时,添加目标位告诉按钮触发给定的选择器。目标是选择器所在的对象。
希望这有帮助,除非您拥有自定义布局或特定的自定义功能,否则您不需要继承UIButton。
答案 1 :(得分:3)
如果您希望按钮始终调用声明的方法,请将上面的代码添加到awakeFromNib
方法
[self addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
以后,当您将其添加到视图控制器时,请不要为其分配新操作,这样它将始终调用您的方法。
答案 2 :(得分:2)
由于您希望处理按钮代码本身的操作,您可能必须覆盖此方法- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents
并处理您的事件,就好像它已发送到您的按钮一样;