我有 UIControl 的子类,并在其中发送:
[self sendActionsForControlEvents:UIControlEventValueChanged];
当我创建对象的实例时,我添加了一个目标,如下所示:
[starView addTarget:self action:@selector(starRatingChanged:) forControlEvents:UIControlEventValueChanged];
该视图显示良好,并且没有目标,该功能运行良好。但是随着添加目标,它会崩溃。任何想法为什么?
我的班级声明为:
@interface RMStarRating : UIControl {...}
对于它的价值,我在- (void)layoutSubviews
. 是否有另一种方法需要子类化才能正确保存目标或向目标发送正确的操作?我认为 UIControl 会为您处理保存目标和操作。
更新:试图提供更多信息
我将对象设置如下:
RMStarRating *starView = [[RMStarRating alloc] initWithFrame:CGRectMake(10, 70, 23*5, 30)];
[starView addTarget:self action:@selector(starRatingChanged:) forControlEvents:UIControlEventValueChanged];
....
[self.view addSubview:starView];
我的 sendAction,根据 Jordan 的建议:
- (void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event {
NSLog(@"send action");
[super sendAction:action to:target forEvent:event];
}
我调用 sendActionsForControlEvents 的函数:
- (void)updateValue:(UITouch *)touch {
....
NSLog(@"sendActionsForControlEvents");
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
以及应该调用的函数(它也在标题中):
- (void)starRatingChanged:(id)sender {
NSLog(@"star rating changed");
}
日志刚刚吐出:
2010-10-22 09:45:41.348 MyApp[72164:207] sendActionsForControlEvents
2010-10-22 09:45:41.350 MyApp[72164:207] send action
调试器有: