Как обнаружить касание события в подпредставлении или как сделать так, чтобы родительское представление было затронуто при прикосновении к подпредставлению? - PullRequest
5 голосов
/ 02 августа 2011

У меня 2 UIView.

первый - родительский вид

второй - подпредставление,

как мы можем определить, когда было затронуто подпредставление?

или я хочу, чтобы родительский вид был затронут, когда пользователь коснулся подпредставления, любой код может помочь мне сделать это?возможно ли это сделать?

, потому что у меня есть функция Something, которая будет вызываться при касании одного из них.

Ответы [ 4 ]

6 голосов
/ 13 сентября 2012

Это сработало для меня:

(ссылка на подвид в xib или раскадровке)

ViewController.h

@interface ViewController : UIViewController

@property (nonatomic, strong) IBOutlet UIView *subview;
@property (nonatomic, strong) UITapGestureRecognizer *tapRecognizer;

@end

ViewController.m

@implementation ViewController

@synthesize subview;
@synthesize tapRecognizer;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                            action:@selector(handleTap:)];   

    [subview addGestureRecognizer:tapRecognizer];
}

- (IBAction)handleTap:(UITapGestureRecognizer *)recognizer {
    if (recognizer.state == UIGestureRecognizerStateEnded){
        //code here
        NSLog(@"subview touched");
    }
}

@end
5 голосов
/ 13 сентября 2012

Проблема была решена.Я думаю, что кто-то дал отличный ответ, но я забыл, как.

Это то, что я сделал.В XIB есть опция.Существует флажок (под названием «Взаимодействие с пользователем включено»), который указывает, обрабатывает ли пользовательское событие подпредставление или нет.

Снимите флажки, и все касания к подпредставлению переходят в родительское представление или любое другое представление позади него.

3 голосов
/ 02 августа 2011

, чтобы обнаружить сенсорное событие, вам нужно добавить UITapGestureRecognizer в вашем вспомогательном или супер-виде (в котором вы хотите получить сенсорный).

- (void)viewDidLoad
{
    UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                    action:@selector(tap:)];
        tap.numberOfTapsRequired = 1;

        [self addGestureRecognizer:tap];


    [super viewDidLoad];
}

тогда вы можете добавить методы делегата UITapGestureRecognizer

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
     UITouch *touch = [touches anyObject]; 
     // here you can get your touch
     NSLog(@"Touched view  %@",[touch.view class] );
}

надеюсь, что это дает вам идею ..

0 голосов
/ 02 августа 2011

Это может помочь:

UITouch *touch = [event.allTouches anyObject];
CGPoint touchPoint = [touch locationInView:YOUR VIEW NAME];
...