2014-12-07 4 views
0

Я искал часы ... Само собой разумеется, я довольно новичок в программировании. Моя цель состоит в том, чтобы программно отобразить подвид и удалить его, нажав на него.Добавить UITapGestureRecognizer в subview

Уже работает: отображение подсмотра и его удаление, нажав на изображение (код ниже).

Не работает - что бы я ни старался: удалив подвью, нажав исключительно на подвью.

Благодарим за помощь!

Мой .h-файл:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController { 

UIImageView *canvas; 
UIImageView *square; 

} 

@property (nonatomic, strong) UIImageView *canvas; 
@property (nonatomic, strong) UIImageView *square; 
@property (nonatomic) NSUInteger numberOfTouchesRequired; 

- (void)handleSingleTap: (UITapGestureRecognizer *)singleTapGestureRecognizer; 


@end 

Мой .m-файл:

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize canvas; 
@synthesize square; 


- (void)handleSingleTap: (UITapGestureRecognizer *)singleTapGestureRecognizer { 

    NSLog(@"tapGesture"); 

    [square removeFromSuperview]; 

} 

- (void)loadView { 

    canvas = [[UIImageView alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]]; 

    [canvas setImage:[UIImage imageNamed:@"canvas.png"]]; 

    self.view = canvas; 

    square = [[UIImageView alloc] initWithFrame:CGRectMake(170, 320, 40, 40)]; 

    [square setImage:[UIImage imageNamed:@"square.png"]]; 

    [self.view setUserInteractionEnabled:YES]; 

    [canvas addSubview:square]; 

    NSLog(@"square"); 

} 

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; 

    NSLog(@"initialize"); 

    singleTapGestureRecognizer.numberOfTapsRequired = 1; 

    NSLog(@"number of taps"); 

    [self.view addGestureRecognizer:singleTapGestureRecognizer]; 

    NSLog(@"square gestureRecognizer"); 

} 


- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 


@end 
+0

хорошо .. для меня проще всего ставится UIButton (с таким же размером, как размер подвида) над этим подвидом и называют удалить действие в IBAction этой кнопки ... Я ненавижу водопроводный жест ... –

ответ

0

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

[square addGestureRecognizer:singleTapGestureRecognizer]; 

вместо

[self.view addGestureRecognizer:singleTapGestureRecognizer]; 

Edit

Также вам нужно будет установитьUserInteractionEnabled в YES UIImage, потому что UIImage's setUserInteractionEnabled по умолчанию равен NO.

[square setUserInteractionEnabled:YES]; 
+0

Пробовал это, но он не работает. Есть идеи? – George

+0

@George См. Отредактированный ответ. –

+0

@George Независимо от того, что, Yogesh и user623396 определенно правы. Жест коснувшись нужно добавить к квадрату, а не ко всему виду. –

0

Вместо

[self.view addGestureRecognizer:singleTapGestureRecognizer]; 

вы должны сказать

[square addGestureRecognizer:singleTapGestureRecognizer]; 
+0

Смотрите комментарий ниже, Пожалуйста. – George

Смежные вопросы