UIButton在uitouch事件中崩溃

时间:2011-03-09 23:32:24

标签: iphone objective-c uibutton uitouch

我有一个UIButton,它将draginside事件发送到:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

它通过viewDidLoad中的以下代码执行此操作:

[colourButton1 addTarget:self action:@selector(touchesBegan:withEvent:) forControlEvents:UIControlEventTouchDown];

在它发送给它的方法中,有以下行:

UITouch *myTouch = [touches anyObject];

由于某种原因,当在UIButton中拖动时,这会导致应用程序崩溃。有什么想法吗?

编辑:解决方案..

-(IBAction)buttonDragged:(id)button withEvent:(UIEvent*)event {
    NSSet *touches = [event touchesForView:colourButton1];
    [self touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event];
}

1 个答案:

答案 0 :(得分:4)

当您将目标添加到控件时,您可以传递3种类型的选择器以进行操作 -

- (void)action
- (void)action:(id)sender
- (void)action:(id)sender withEvent:(UIEvent*)event

名称无关紧要,重要的参数数量。如果控制向它的目标发送一个带有2个参数的消息,则第一个参数将控制自身(在您的情况下为UIButton的实例),第二个参数为UIEvent的实例。但是您希望NSSet的实例作为第一个参数,并向其发送anyObject UIButton无法理解的消息。这是崩溃的原因。

为什么您首先尝试将事件从UI控件发送到触控处理方法touchesMoved:withEvent:?它可能与你的意思有所不同。

<强>更新

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent *)event {
    UITouch *t = [touches anyObject];
    CGPoint touchLocation = [t locationInView:self.view];
    NSLog(@"%@", NSStringFromCGPoint(touchLocation));
}


- (IBAction)buttongDragged:(id)button withEvent:(UIEvent*)event {
    NSSet *touches = [event touchesForView:button];
    [self touchesMoved:touches withEvent:event];
}

请注意,由于touchesMoved:withEvent:UIResponder的方法,而控制器的视图 UIResponder,因此此方法的触摸事件也会调用此方法。