如何以编程方式触发 UIView 的点击手势识别器

How to trigger tap gesture recognizer of UIView programmatically

我想获取附加到 UIView 的点击 gesture 识别器并以编程方式触发它。我成功地找到了一种方法来找到 UIView 的点击手势识别器。但现在我不知道如何以编程方式触发它。我正在开发应用 crawler。所以如果我有一个ViewController的源代码那么,我的爬虫就会开始爬取ViewController的所有subviews。此外,爬虫会发现 gesture 附加到 subviews。并触发点击 gesture

注意:我知道如何将手势识别器附加到 UIView 并触发它。但就我而言,我想自动化应用程序的点击过程。考虑一下,因为我想在运行时找到 UIView 的点击手势识别器并触发它。

不能,因为手势不会公开其目标和动作。您需要创建一个子类,或者使用一些私有 API 来访问这些值,以便您可以使用它们。如果你正在创建一些通用的东西,那么子类选项无论如何都不好,但更广泛地说,并不是所有的东西都适用于手势,所以你的解决方案是不完整的。

我认为大多数测试工具都使用辅助功能界面来查找交互式视图并以编程方式点击它们。

techcraze兄一般Gesture Says

Gestures are actually touches and movements of one or more fingers that happen on a specific area of the screen, where a view of interest exists there

说到Tap gesture Recognizer

UITapGestureRecognizer: This class regards the tap gestures made on a view. It can be used to handle single or multiple taps, either with one or more fingers. Tapping is one of the most usual gestures that users make.

没有手指帮助你不能自动完成兄弟

所以我们的代码符合

- (void)viewDidLoad
{
  UITapGestureRecognizer *tapgesture =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapView:)];
  tapgesture.numberOfTouchesRequired=1;
  [self.view addGestureRecognizer:tapgesture];
}

-(void)tapView:(UITapGestureRecognizer *)gesture
{
  NSLog(@"The taped tag view is - %ld",gesture.view.tag);
}

我通过创建假触摸解决了这个问题。无法触发手势,因为手势不会公开其操作和选择器。但是因为我有 UIView 我想点击。我可以在 UIView 上创建一个假触摸。这种假触摸会自动触发点击手势。 This link 对此很有帮助。