2017-05-10 15 views
0

私は、チャットの目的でJSQMessagesViewControllerライブラリを使用しています。チャットにはURLが含まれる可能性があります。ユーザーがurlをクリックすると、urlがsafariで開きます。Objective c xibクラスのviewcontroller(swift)をナビゲートする方法

ウェブビューを持つ自分のView ControllerでURL​​を開きたいとします。しかし、私はどのように迅速に行われている客観的なcでviewcontrollerをナビゲートすることができないのか分かりません。

- (BOOL)textView:(UITextView *)textView 
shouldInteractWithURL:(NSURL *)URL 
     inRange:(NSRange)characterRange 
    interaction:(UITextItemInteraction)interaction 
{ 
    // Navigate to next VC 
    return NO; 
} 

ありがとうございます。

答えて

0

しかし、私はどのように視覚制御器をナビゲートできますか?客観的なc は迅速に作られています。

Use bridging headerあなたの迅速なviewcontrollerをobjective-cコードで表示できるようにするには、通常の手順でviewcontrollerをプッシュできます。フレームワークの

MySwiftVC *vc = [MySwiftVC init....]; 
vc.someProperty = Blah blah...; 
[self.navigationController pushViewController:vc animated:true]; 
+0

を処理するとき、私はJSQMessagesLibraryを使用していObjective-Cのコントローラ、Objective-Cのクラスであなたのコンテキストで

#import "<productName>-Swift.h" 

に従うように私は、スウィフトクラス参照を含めますライブラリでのナビゲーションをしたいのですが、どうすればいいですか? –

+0

あなたはそれをサブクラス化し、Safariでurlを開く関数をオーバーライドし、どこでも 'JSQMessagesLibrary'ではなく' CustomJSQMessagesLibrary'というカスタムコントロールを使用する必要があります。 – NeverHopeless

0

(E。Cocoapods)プロジェクト(例えば、手動でドラッグ)のための

@import frameworkName 

#import "projectName-Swift.h" 

、あなたにアクセスしたい場合は

0

それを使用Objective-Cヘッダーファイルをインポートする必要があるBridgingヘッダーが必要なObjective-Cクラス。

Objective-CでSwiftクラスにアクセスするには、Xcodeが自動的に生成するヘッダファイルswift.hをインポートする必要があります。あなたのswift.hファイルの完全な名前は、(yourprojectname-Swift.h)になります例えばExample-Swift.h

#import "yourprojectname-Swift.h" 

今、あなたはあなたの目的-C

今、あなたはあなたのswiftViewControllers同じように使用することができますであなたのViewControllerにアクセスすることができますあなたのやってあなたの目的-C

// Name of your Swift View Controller 
YourSwiftViewController *yourSwiftVC = [[YourSwiftViewController alloc] init]; 
[self.navigationController pushViewController:yourSwiftVC animated:YES]; 
+0

私はサードパーティのライブラリでこれをやりたい、私はこの目的のためにポッドをインストールしている。 –

+0

その場合、サードパーティのライブラリには、それを上書きできる機能が必要です。また、通知や何らかのブロックを投稿することもできます。それとも、あなたに通知することなく、それ自体でURLを直接開きますか? –

+0

私はurlをクリックすると自動的にsafariのurlを開きました。 –

0

としてあなたは

    、スウィフトとObjective-Cの間のブリッジを必要とします
  1. swypeクラスで@objcを追加すると、@objc class Abc{}というように定義されます。

  2. Xcodeが自動的にブリッジファイルを生成できるようにプロジェクトをビルドします。 Objective-Cのファイル

  • インポート"YourProject-Swift.h"は今、あなたは、Objective-Cで迅速なクラスを呼び出すことができます。 これがあなたを助けてくれることを願っています。 URLと

    var url: URL! 
    

    とloadRequest:

  • 0

    は、あなたの迅速なのViewControllerのようなURLの変数を持っていると想定します。

    override func viewWillAppear(_ animated: Bool) { 
        super.viewWillAppear(animated) 
        webView.loadRequest(URLRequest(url: url)) 
    } 
    

    のTextView shouldInteractWithURL

    SwiftWebViewController *vc = [[SwiftWebViewController alloc] init]; 
    vc.url = URL; 
    [self presentViewController:vc animated:YES completion:nil]; 
    
    return NO; 
    
    関連する問題