LoginSignup
0
0

More than 5 years have passed since last update.

[Objective-C]3D Touch対応端末でshouldInteractWithURLが複数コールされる場合の対処

Posted at

3D Touch対応端末だとリンクを強く長押しした際にshouldInteractWithURLが2度呼ばれるためハマッた。対処法が若干黒魔法的な手法にはなってしまうが。。

用途

UITextViewのDataDetectorsで指定したリンカブルな文字列を長押しした場合にSafariに飛ばさず自前で実装する場合

対応方法

UITextViewに含まれるgestureRecognizersからUIGestureRecognizerを取り出し、特定のゼスチャーを無効にする。アプリ全体で使用するならカテゴリ化すると良い。

3D Touch対応端末かどうかの判定を処理実行前に分岐させるのが望ましい。

UITextView+Extension.m
for (UIGestureRecognizer *gesture in self.gestureRecognizers) {
   NSString *gestureClassName = NSStringFromClass([gesture class]);
   if ([gestureClassName isEqualToString:@"_UIRevealGestureRecognizer"]) {
         gesture.enabled = NO;
   }
}

備考

リンクを長押しした時のハイライト表示の挙動をいじりたい場合は同じくgestureRecognizersに含まれるゼスチャーを取り出してenabledの値を指定すると解決する模様。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0