使用 xib 将 tapGestureRecognizer 添加到自定义 UIView

Posted

技术标签:

【中文标题】使用 xib 将 tapGestureRecognizer 添加到自定义 UIView【英文标题】:Adding a tapGestureRecognizer to a Custom UIView with xib 【发布时间】:2012-09-10 16:38:16 【问题描述】:

背景:我有一系列问题,这些问题是设置一堆 uiview 并将它们布置在屏幕上的基础。每个 uiview 都有一个标题和一个 imageview。我想在 imageview 中添加一个点击手势识别器,并让 uiview 成为手势委托。

问题:无法让uiview拾取手势。

到目前为止我所尝试的:如果我使用带有框架的 init 在代码中初始化视图,而不是通过主包加载 xib 并以 viewcontroller 作为所有者,则可以在不修改手势代码的情况下工作。所以我认为问题一定在于如何以及何时添加手势识别器。目前我正在使用一种设置方法,该方法加载问题名称,然后将其添加到那里。从笔尖唤醒时添加它不起作用。

这是加载每个uiview的循环中的代码

NSArray* bundle = [[NSBundle mainBundle] loadNibNamed:@"QnA" owner:self options:nil];

QuestionAnswer *qa;
for (id object in bundle) 
    if ([object isKindOfClass:[QuestionAnswer class]])
        qa = (QuestionAnswer *)object;
    

CGRect f = qa.frame;
f.origin.x = x;
f.origin.y = y;
qa.frame = f;
[self.view addSubview: qa];
[qa setup:[questions objectAtIndex:i ]];

这是 QuestionAnswer 类中的“设置”方法

-(void)setup:(NSString *)label

    self.afl.text = label;
    UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapped:)];
    tgr.delegate = self;
    [self addGestureRecognizer:tgr];


QuestionAnswer 实现 UIGestureRecognizerDelegate。我在 imageTapped 的第一行有一个断点,它永远不会到达那里。我也尝试将手势识别器直接应用到图像视图,但无济于事。

viewcontroller 位于 splitview 控制器中,当我在代码中初始化视图时,不要认为这与识别器工作有关。 :/

【问题讨论】:

你的 imageTapped 方法是做什么的? -(void)setup:(NSString *)label 在哪个类中找到?它的超类是什么?是 UIView 吗? imageTapped 永远不会被调用。 (QuestionAnswer 类)是的 UIView 是它的超类 【参考方案1】:

在 viewDidLoad 方法中添加手势识别器。

【讨论】:

我可能弄错了,但我不认为 UIView 有 viewDidLoad 方法,至少如果我添加它它不会自动完成或被调用。我不想从父 VC 调用手势识别器,因为它会破坏模块化。

以上是关于使用 xib 将 tapGestureRecognizer 添加到自定义 UIView的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 tapGestureRecognizer 在屏幕上注册点击

将 TapGestureRecognizer 添加到除 UICollectionView 单元格之外的整个视图

将tapGestureRecognizer添加到其背景视图时无法触发collectionview的事件

TapgestureRecognizer 将触摸检测为滚动视图

将 TapGestureRecognizer 应用于水平列表中的标签 - Xamarin Forms

在 UIView 中将 tapGestureRecognizer 添加到 UIImageView 并通过协议调用方法