4

我有 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

调试器有:

调试器图片

4

2 回答 2

0

Ok, I figured out what it was. I was releasing my parent class too soon, so there was no object for the message to be sent back to, even though it was showing on screen.

And I ended up not needing the sendAction:to:forEvent.

Jordan, thanks you for your help.

于 2010-10-22T15:38:20.097 回答
0

您是否尝试过实施

- (void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event

反而?一个很好的例子在这里:

我可以为 UISegmentedControl 覆盖 UIControlEventTouchUpInside 吗?

于 2010-10-21T22:35:22.167 回答