UIButton TouchUpInside Touch Местоположение - PullRequest
30 голосов
/ 11 сентября 2011

Итак, у меня большой UIButton, это UIButtonTypeCustom, и цель кнопки называется UIControlEventTouchUpInside. Мой вопрос: как я могу определить, где в UIButton произошло касание? Я хочу эту информацию, чтобы я мог отобразить всплывающее окно из сенсорного местоположения. Вот что я попробовал:

UITouch *theTouch = [touches anyObject];
CGPoint where = [theTouch locationInView:self];
NSLog(@" touch at (%3.2f, %3.2f)", where.x, where.y);

и другие различные итерации. Целевой метод кнопки получает информацию от него через sender:

    UIButton *button = sender;

Так есть ли способ, которым я мог бы использовать что-то вроде: button.touchUpLocation?

Я посмотрел онлайн и не смог найти ничего похожего на это, поэтому заранее спасибо.

Ответы [ 2 ]

58 голосов
/ 11 сентября 2011
UITouch *theTouch = [touches anyObject];
CGPoint where = [theTouch locationInView:self];
NSLog(@" touch at (%3.2f, %3.2f)", where.x, where.y);

Это правильная идея, за исключением того, что этот код, вероятно, находится внутри действия в вашем контроллере представления, верно?Если это так, то self относится к контроллеру вида, а не к кнопке.Вы должны передать указатель на кнопку в -locationInView:.

Вот проверенное действие, которое вы можете попробовать в вашем контроллере вида:

- (IBAction)buttonPressed:(id)sender forEvent:(UIEvent*)event
{
    UIView *button = (UIView *)sender;
    UITouch *touch = [[event touchesForView:button] anyObject];
    CGPoint location = [touch locationInView:button];
    NSLog(@"Location in button: %f, %f", location.x, location.y);
}
5 голосов
/ 27 марта 2017

Для Swift 3.0:

@IBAction func buyTap(_ sender: Any, forEvent event: UIEvent) 
{
       let myButton:UIButton = sender as! UIButton
       let touches: Set<UITouch>? = event.touches(for: myButton)
       let touch: UITouch? = touches?.first
       let touchPoint: CGPoint? = touch?.location(in: myButton)
       print("touchPoint\(touchPoint)")  
}
...