2010-10-21 61 views
4

我有子类UIControl,并在其中我送:UIControl子类无法获取目标?

[self sendActionsForControlEvents:UIControlEventValueChanged]; 

当我创建的对象的实例,我添加了一个目标如下:

[starView addTarget:self action:@selector(starRatingChanged:) forControlEvents:UIControlEventValueChanged]; 

的视图显示了罚款,如果目标不在那里,那么功能运作良好。但是添加目标时,它会崩溃。任何想法为什么?

我的类都被定义为:

@interface RMStarRating : UIControl {...} 

对于什么是值得的,我建立了我的观点在- (void)layoutSubviews。是否还有另外一种方法需要进行子类化才能正确保存目标或为目标发送正确的操作?我认为UIControl会为您节省目标和行动。

UPDATE:努力提供更多信息

我设定的目标,如下所示:

RMStarRating *starView = [[RMStarRating alloc] initWithFrame:CGRectMake(10, 70, 23*5, 30)]; 
[starView addTarget:self action:@selector(starRatingChanged:) forControlEvents:UIControlEventValueChanged]; 
.... 
[self.view addSubview:starView]; 

我sendAction,根据乔丹的建议:

- (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 

调试器有:

debugger picture

+0

它为什么会崩溃?什么行代码?调用堆栈说什么?推测性诊断崩溃可能很困难。 – 2010-10-21 22:37:17

+0

我不知道它为什么崩溃,这是我想找出。它在sendActionsForControlEvents上崩溃:(除非我实现了Jordan的答案,在这种情况下,它在崩溃期间)。我想,在UIController和我的班级的连接之间出现了一些问题。日志在死亡时不会吐出任何东西。 – RyanJM 2010-10-21 23:38:31

回答

0

好吧,我想通了,这是什么。我很快就发布了我的父类,因此没有消息被发回,即使它显示在屏幕上。

而我最终不需要sendAction:to:forEvent。

约旦,谢谢你的帮助。

+0

哈哈 - 看,它会帮助你发布所有的代码,而不是片段。很难说真的在发生什么。很高兴你想出来了。 – Jordan 2010-10-22 16:13:31

0

您是否尝试过实施

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

取而代之?一个很好的例子是位于:

Can I override the UIControlEventTouchUpInside for a UISegmentedControl?

+0

感谢您的链接。不幸的是,通过超级没有工作。 sendAction:to:forEvent确实被调用,但仍然崩溃。 – RyanJM 2010-10-21 23:36:33

+0

然后你有另一个问题。至少发布崩溃日志,以及使用sendAction和代码进行安装。 – Jordan 2010-10-22 00:13:49

+0

我发布了更多信息,希望有所帮助。通过崩溃日志,你的意思是开发日志正确吗? – RyanJM 2010-10-22 14:51:34