标签: uitapgesturerecognizer

UITapGestureRecognizer - 检测双重或三重敲击?

我有一个案例,需要通过双击和特定视图的三击来完成两种完全不同的行为.我将其设置得非常标准,代码如下:

UITapGestureRecognizer *gestureRecognizerDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapDetected:)];
[gestureRecognizerDoubleTap setNumberOfTapsRequired:2];
[self.theView addGestureRecognizer:gestureRecognizerDoubleTap];

UITapGestureRecognizer *gestureRecognizerTripleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tripleTapDetected:)];
[gestureRecognizerTripleTap setNumberOfTapsRequired:3];
[self.theView addGestureRecognizer:gestureRecognizerTripleTap];
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,如果完成三次点击,双击方法也会被触发,因为它会在第3次之前检测到2次点击.因此,在三次敲击时,两种方法都被调用.

显然,这不是代码或底层SDK的固有问题,因为它是完全预期的.但是,我很好奇是否有人聪明地以某种方式阻止双击功能被调用如果完成三击?我假设我可能不得不在延迟计时器上设置双击功能(这将等待一瞬间确认是否完成了三次点击),但我不确定是否有更好的方法,甚至以干净的方式设置这种东西的最好方法是什么?

提前感谢您提供的任何建议!

iphone objective-c ios uitapgesturerecognizer

3
推荐指数
1
解决办法
3174
查看次数

如何快速检测哪个图像被点击

我在 ViewController 上创建了 6 个 UIImageView,稍后我将向所有这些视图添加 TapGestureRecognizer。

我想让它根据单击的图像,另一个 ViewController 将打开并显示某些信息。

为此,我需要知道单击了哪个图像。我该如何在 Swift 中做到这一点?

uiimageview ios uitapgesturerecognizer swift

3
推荐指数
1
解决办法
4572
查看次数

IOS:在加载视图后首先点击不起作用

我最近注意到我的每个应用程序视图都有一个特定的错误/行为:如果用户在视图出现时在 UI 组件上点击太快,则点击会被忽略。如果用户在点击之前稍等片刻,则点击有效。

Storyboard 用于情节提要,点击手势识别器位于 UIImageview 上并使用 IOS 10.2。

通过不同的论坛,我阅读了以下选项:

  • 在主线程中嵌套“当前视图控制器”的调用
  • 在presentviewcontroller之前调用CFRunLoopWakeup
  • 以编程方式添加 TapGesturerecognizer
  • 更改“延迟触摸结束”和“延迟触摸开始”的状态
  • 禁用 3d touch 选项,因为据报道其他应用程序中发生了类似的症状

以上均未成功。任何人都会在视图加载后第一次点击时遇到类似问题?

[更新:我意识到这种不当行为并非特定于该应用程序。要尝试的两个测试:

  • 为 iPhone 和两个视图控制器控制器 A 和控制器 B 创建一个 xCode 项目。两个按钮:控制器 A 视图上的按钮转到控制器 B 视图和返回控制器 B 视图中的按钮返回控制器 A 视图。点击从视图 A 转到 B,在 B 中点击返回并尝试立即点击按钮转到 B。第一次点击也不起作用。

  • 进入 iPhone 的设置。点击通知。按设置返回主设置屏幕,立即点击通知。如果足够快,第一次点击不起作用。第二次点击有效或在第一次点击之前等待一段时间。

现在的问题是:这看起来像是 iPhone 应用程序中的一个常见问题。你知道某个地方是否会有一个共同的设置吗?或者这是给定 IOS 版本的常见错误?]

斯蒂芬

viewcontroller ios uitapgesturerecognizer

3
推荐指数
1
解决办法
1740
查看次数

如果我们在 Swift 中触摸 UITextView 之外的其他区域,如何关闭键盘

在静态表视图中有 UITextView ,如果用户触摸textView 之外的其他区域,我想移除键盘

通常我可以用这行代码来移除键盘,但我不知道为什么,在 textview 中添加占位符后,它不起作用。我怀疑是因为它在静态表视图中

extension CheckinDetailTVC {

    // to remove keyboard if we touch other area
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(false)
    }

}
Run Code Online (Sandbox Code Playgroud)

我也在 stackoverflow 中尝试了另一种解决方案,但没有人在我身上工作,比如添加手势识别器

override func viewDidLoad() {
    super.viewDidLoad()
    let tapGestureReconizer = UITapGestureRecognizer(target: self, action: "tap:")
    view.addGestureRecognizer(tapGestureReconizer)
}

func tap(sender: UITapGestureRecognizer) {
    view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)

或在 TextViewDelegate 中添加函数,但它也不起作用

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
    if text == "\n" {
        textView.resignFirstResponder()
    } …
Run Code Online (Sandbox Code Playgroud)

uitableview uitextview ios uitapgesturerecognizer swift

3
推荐指数
3
解决办法
7420
查看次数

从点击手势识别器获取标签

我有一组 UIImageViews 并以编程方式为它们分配了点击手势识别器。

    myImages.forEach{ UIImageView in
        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(gesture:)))
        tap.numberOfTapsRequired = 1
        tap.delegate = self
        view.addGestureRecognizer(tap)
        }
Run Code Online (Sandbox Code Playgroud)

将发件人分配给每个人的最佳方法是什么(或确定以另一种方式点击哪个图像)?我试过不成功

var tag = sender.view!.tag
Run Code Online (Sandbox Code Playgroud)

谢谢!

uigesturerecognizer ios uitapgesturerecognizer swift

3
推荐指数
1
解决办法
3124
查看次数

使用 UITapGestureRecognizer 从点击的单元格获取标签文本

我想通过点击单元格标签(而不是didSelectRowAt)来编辑标签文本。点击标签函数 ( toDoItemLabelTapped) 显示 nil。

虽然UITapGestureRecognizer效果很好,但它不传递标签文本。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as!  ToDoItemsCell

    cell.delegate = self

    cell.textField.delegate = self
    cell.textField.isHidden = true
    cell.toDoItemLabel.isUserInteractionEnabled = true

    let aSelector : Selector = Selector(("toDoItemLabelTapped"))
    var tapGesture = UITapGestureRecognizer(target: self, action: aSelector)

    tapGesture.numberOfTapsRequired = 1
    cell.addGestureRecognizer(tapGesture)
    tapGesture.delegate = self as? UIGestureRecognizerDelegate
    tapGesture = UITapGestureRecognizer(target: self, action: aSelector)

    return cell
}
Run Code Online (Sandbox Code Playgroud)

这是函数:

var customTableViewController = ToDoItemsCell()

@objc …
Run Code Online (Sandbox Code Playgroud)

uitableview ios uitapgesturerecognizer swift

3
推荐指数
1
解决办法
1106
查看次数

UITapGestureRecognizer吞下所有手势

我正在尝试将UITapGestureRecognizer添加到我的应用程序中,以便我可以检测并对所有两个手指点击进行操作,但是通过任何其他用户输入.听起来微不足道,但我无法让它发挥作用.这是我的代码到目前为止,在我的主视图控制器中:

- (void) viewDidLoad {
  // other init stuff
  UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
  [tapRecognizer setNumberOfTouchesRequired:2];
  [tapRecognizer setNumberOfTapsRequired:1];
  [tapRecognizer setCancelsTouchesInView:NO];

  UIView *tapHolderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
  [tapHolderView setMultipleTouchEnabled:YES];
  [tapHolderView addGestureRecognizer:tapRecognizer];

  [self.view addSubview:tapHolderView];

  [tapRecognizer release];
}

- (void) handleTap:(UITapGestureRecognizer *) sender {
  if (sender.state == UIGestureRecognizerStateEnded) {
    // do something
  }
}
Run Code Online (Sandbox Code Playgroud)

会发生什么:双指点按将触发handleTap方法.任何其他用户输入,无论是滑动,捏合,单指点击等,都不会被任何其他视图(UIToolbar,UIWebView等)拾取.

我非常感谢您对此有任何见解,如果我对这个问题不够具体,请告诉我.

multi-touch uiviewcontroller uiview ios uitapgesturerecognizer

2
推荐指数
1
解决办法
3518
查看次数

如何从UITableView iphone获取UITableView IndexPath?

在我的iPhone应用程序中,我有一个消息传递屏幕 我添加UITapGestureRecognizerUIViewController,我也在UITableview屏幕上.我想选择UITableViewCell但我不能选择UITableView因为UITapGestureRecognizer.当我触摸屏幕时,仅调用轻击手势动作,但不调用UITableView委托didSelectRowAtIndexPath:.任何人都可以请我帮助我处理轻拍手势和UITableView:didSelectRowAtIndexPath:.提前致谢.

iphone uitableview didselectrowatindexpath ios uitapgesturerecognizer

2
推荐指数
1
解决办法
2643
查看次数

多个UIImageView上的TapGesture识别器无法正常工作

多个UIImageView上的TapGesture识别器无法正常工作,同时它检测到最后添加的图像视图手势..我已经这样做了,

 UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myFunction:)];
tapped.numberOfTapsRequired = 1;
tapped.delegate = self;


UIImageView *sample_book1= [[UIImageView alloc]initWithFrame:CGRectMake(70, 135, 100,125) ];
sample_book1.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"mathematics.png"]];
sample_book1.userInteractionEnabled = YES;
sample_book1.tag = 0;
[sample_book1 addGestureRecognizer:tapped];
[self.view addSubview:sample_book1];

UIImageView *sample_book2= [[UIImageView alloc]initWithFrame:CGRectMake(220, 135, 100,125) ];
sample_book2.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"biology.png"]];
sample_book2.userInteractionEnabled = YES;
sample_book2.tag = 1;
[sample_book2 addGestureRecognizer:tapped];
[self.view addSubview:sample_book2];

UIImageView *sample_book3= [[UIImageView alloc]initWithFrame:CGRectMake(370, 135, 100,125) ];
sample_book3.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"chemistry.png"]];
sample_book3.userInteractionEnabled = YES;
sample_book3.tag = 2;
 [sample_book3 addGestureRecognizer:tapped];
[self.view addSubview:sample_book3]; …
Run Code Online (Sandbox Code Playgroud)

objective-c uiimageview ios uitapgesturerecognizer

2
推荐指数
2
解决办法
3358
查看次数

iOS - 在图像视图上点击手势问题

我正在慢慢地通过Apple的学习Swift的开发工作,我一直在用我的轻拍手势遇到问题.我重新创建了项目编号,所有结果都相同.

我在图像视图中添加了一个轻击手势,这应该会从我的计算机中打开照片库.什么都没发生.

当我从Apple下载并运行示例文件时,一切正常.当我将Apple的代码复制并粘贴到我的代码时,没有任何反应.我已经完成了我所能做的一切,但我觉得我错过了一些东西.

这是我的代码.Apple的代码如下:

import UIKit

class ViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    // MARK: Properties
    @IBOutlet weak var nameTextField: UITextField!
    @IBOutlet weak var mealNameLabel: UILabel!
    @IBOutlet weak var photoImageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // handle the text fields user input through delegate callbacks
        nameTextField.delegate = self

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: UITextFieldDelegate
    func textFieldShouldReturn(textField: UITextField) -> Bool {
       // Hide the Keyboard
        textField.resignFirstResponder()
        return …
Run Code Online (Sandbox Code Playgroud)

ios uitapgesturerecognizer swift swift3

2
推荐指数
1
解决办法
1914
查看次数