簡體   English   中英

除了雙擊UITextView之外的前向觸摸

[英]Forward touches other than double tap to UITextView

我有一個UITextView ,我有多個UIView UIView上的任何觸摸操作都可以與相應的IBAction相關聯。 在我的場景中,需要將雙擊手勢與UIViewIBAction相關聯,除此之外的任何其他觸摸都需要轉發到底層的UITextView

我執行上述場景的代碼塊

UITextView *textView = [[UITextView alloc] init];

UIView *subview = [[UIView alloc] init];

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)];
doubleTap.numberOfTapsRequired = 2;
[subview addGestureRecognizer:doubleTap];

[textView addSubview: subview];

我嘗試了以下SO解決方案,

如何忽略觸摸事件並將它們傳遞給另一個子視圖的UIControl對象?

使用hitTest我無法捕獲UITextView頂部的UITextView雙擊手勢

使UIGestureRecognizer接收從子視圖開始的觸摸

轉發UITouch從集touchBegan:withEvent:UIViewUITextView不給預期的默認行為UITextView

是否有其他解決方案可用於解決此問題?

提前致謝。

這可以通過以下方式完成:

  1. 讓UITextView按照如何忽略觸摸事件中的建議處理觸摸事件並將它們傳遞給另一個子視圖的UIControl對象?
  2. 在UIView的hitTest中保存對其發生的視圖的引用,以便以后可以使用它
  3. 添加自定義雙擊手勢識別器,檢查hitTest引用是否為空,表示雙擊發生在目標視圖上並將事件轉發到該視圖。 如果沒有,則手勢識別器失敗。 要使手勢識別器失敗,您需要包含UIKit / UIGestureRecognizerSubclass.h並將state屬性設置為UIGestureRecognizerStateFailed
  4. 將手勢識別器添加到UITextView
  5. 擴展UITextView以覆蓋gestureRecognizers getter並遍歷手勢識別器以要求自定義手勢失敗。 這必須在getter中完成,因為手勢識別器似乎經常被重置

子視圖是不必要的,刪除它,並替換:

[subview addGestureRecognizer:doubleTap];

WITH:

[textView addGestureRecognizer:doubleTap];

現在你應該在tapDetected:方法中獲取你的事件。

要確保您沒有更改UITextView行為,請使用以下方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

要么

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM