1. ホーム
  2. iphone

[解決済み] UITextViewでリンクのクリックを妨害するには?

2022-10-22 14:25:30

質問

UITextViewで自動検出された電話リンクをユーザーがタッチしたときに、カスタムアクションを実行することは可能でしょうか?UIWebViewを使用するようにアドバイスしないでください。

また、アップルクラスのリファレンスからテキストを繰り返すのはやめてください。 - 私はすでにそれを読みました。

ありがとうございます。

どのように解決するのですか?

更新しました。より ios10 ,

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction;

から ios7 以降 UITextView にはデリゲートメソッドがあります。

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange *NS_DEPRECATED_IOS(7_0, 10_0, "Use textView:shouldInteractWithURL:inRange:forInteractionType: instead");*

を使って、リンクへのクリックを横取りします。そして、これが一番いい方法です。

には ios6 およびそれ以前のバージョンでは、サブクラス化された UIApplication をサブクラス化し -(BOOL)openURL:(NSURL *)url

@interface MyApplication : UIApplication {

}

@end

@implementation MyApplication


-(BOOL)openURL:(NSURL *)url{
    if  ([self.delegate openURL:url])
         return YES;
    else
         return [super openURL:url];
}
@end

を実装する必要があります。 openURL: をデリゲートで実装する必要があります。

さて、新しいサブクラスである UIApplication の新しいサブクラスでアプリケーションを開始するために、プロジェクト内の main.m ファイルを探します。アプリをブートストラップするこの小さなファイルには、通常次の行があります。

int retVal = UIApplicationMain(argc, argv, nil, nil);

3番目のパラメータは、アプリケーションのクラス名です。ですから、この行を次のように置き換えます。

int retVal = UIApplicationMain(argc, argv, @"MyApplication", nil);

これでうまくいきました。