касание какао: как узнать, к какому объекту прикоснулись - PullRequest
1 голос
/ 19 апреля 2011

Извините, но очень простой вопрос для начинающих: представьте, что у вас есть UITextField и UITextView.Затем представьте прозрачный UIView, расположенный над этими TextField / View, чтобы они не реагировали, если вы к ним прикасаетесь.

Если вы дотронетесь (в отличие от пролистывания или сжатия и т. Д.) До UIView, я бы хотел, чтобы это былопользователь трогает (т.е. TextField или View) становится первым респондентом.Есть ли такая команда:

[objectThatWasTouched becomeFirstResponder];?

Мне нужно это в следующем методе.Сейчас он настроен так, что UITextView становится первым респондентом, но я бы хотел, чтобы любой объект, к которому прикоснулись, стал первым респондентом:

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

    [super touchesMoved:touches withEvent:event];

    UITouch *touch = [touches anyObject];
    CGPoint currentPosition = [touch locationInView:self.view];

    CGFloat deltaX = fabsf(gestureStartPoint.x - currentPosition.x); // will always be positive
    CGFloat deltaY = fabsf(gestureStartPoint.y - currentPosition.y); // will always be positive


    if (deltaY == 0 && deltaX == 0) {

        [self.view bringSubviewToFront:aSwipeTextView];
        [self.view bringSubviewToFront:noteTitle];
        [self.view bringSubviewToFront:doneEdit];


        [aSwipeTextView becomeFirstResponder];


    }


}

И, наконец, мне нужен какой-то метод избавленияпервого респондента, то есть в зависимости от того, кто первый респондент.Это избавит только от первого респондента, когда UITextView коснулся:

    - (IBAction)hideKeyboard
{
    [aSwipeTextView resignFirstResponder];
    [self.view bringSubviewToFront:canTouchMe];

}

Ответы [ 3 ]

4 голосов
/ 01 октября 2011
UITouch *touch = [touches anyObject];

if (touch.view == mybutton){

        NSLog(@"My Button pressed");
}
2 голосов
/ 20 апреля 2011

Вы можете попробовать что-то вроде этого:

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

    [super touchesMoved:touches withEvent:event];

    UITouch *touch = [touches anyObject];
    CGPoint currentPosition = [touch locationInView:self.view];

    UIView *hitView = [self hitTest:currentPosition withEvent:event];

    if([hitView isKindOfClass:[UIResponder class]] && [hitView canBecomeFirstResponder]) {
       [hitView becomeFirstResponder];
    }

    // ... more code ...
}
1 голос
/ 21 мая 2014

Примечание: в этом случае myView должен быть включен userInteraction (myView.userInteractionEnabled = YES), в противном случае событие touch будет передано в его superView, чье userInteraction включено.

UITouch * touch = [touch anyObject];

if (touch.view == myView) {

    NSLog(@"My myView touched");

}

...