【问题标题】:Add a UITapGestureRecognizer to a subview将 UITapGestureRecognizer 添加到子视图
【发布时间】:2014-12-07 14:06:47
【问题描述】:

我一直在寻找几个小时......不用说,我在编程方面相当新。 我的目标是以编程方式显示子视图并通过点击它来删除它。

已经开始工作:显示子视图并通过点击视图将其删除(代码如下)。

不起作用 - 我尝试什么:通过专门点击子视图来删除子视图。

感谢您的帮助!

我的 .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

【问题讨论】:

  • 好.. 对我来说最简单的方法是将 UIButton(与子视图大小相同)放在此子视图上,并在此按钮的 IBAction 中调用删除操作...我讨厌点击手势...

标签: ios objective-c iphone uiview uigesturerecognizer


【解决方案1】:

如果您想专门删除子视图,当您点击该视图时,您需要在该视图上添加点击手势

[square addGestureRecognizer:singleTapGestureRecognizer];

而不是

[self.view addGestureRecognizer:singleTapGestureRecognizer];

编辑

您还需要将UIImage 的setUserInteractionEnabled 设置为YES,因为UIImage's setUserInteractionEnabled 默认为NO。

[square setUserInteractionEnabled:YES];

【讨论】:

  • @George 不管怎样,Yogesh 和 user623396 绝对是对的。点击手势需要添加到正方形而不是整个视图。
  • @YogeshSuthar Canvas 也需要启用用户交互,因为方形是它的子视图。
  • @YogeshSuthar 太好了,就是这样!非常感谢!
  • @user623396 和 Lyndsey Scott 也非常感谢!
【解决方案2】:

而不是

[self.view addGestureRecognizer:singleTapGestureRecognizer];

你应该说

[square addGestureRecognizer:singleTapGestureRecognizer];

【讨论】:

  • 请看下面的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 2011-10-04
  • 1970-01-01
相关资源
最近更新 更多