2017-05-10 65 views
0

我正在使用JSQMessagesViewController庫進行聊天。聊天可能包含網址。如果用戶點擊網址在safari中打開的網址。如何瀏覽目標c xib類中的viewcontroller(這是在swift中製作的)

我想在我自己的View Controller中打開具有webview的url。但我不知道如何在快速製作的目標c中導航視圖控制器。

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

在此先感謝您。

回答

0

但我不知道如何瀏覽在swift中製作的目標c 中的視圖控制器。

Use bridging header爲了讓您的swift viewcontroller在objective-c代碼中可見,那麼您可以使用普通的過程來推視圖控制器。

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的函數,並且在每個地方都使用定製控件「CustomJSQMessagesLibrary」而不是「JSQMessagesLibrary」。 – NeverHopeless

0

的框架(如的CocoaPods)

@import frameworkName 

項目(即手動拖動)

#import "projectName-Swift.h" 

,並用它

0

如果您要訪問您的Objective-C類你需要一個橋接頭,你必須導入你的Objective-C頭文件。

如果你想訪問Objective-C中的Swift類,你必須導入swift.h,這是一個由Xcode記住自動生成的頭文件。您swift.h文件的完整名稱將是(爲yourprojectname-Swift.h)如Example-Swift.h

#import "yourprojectname-Swift.h" 

現在,您可以訪問您的ViewController在你的目標-C

現在你可以使用你的swiftViewControllers以同樣的方式爲您做你的目標-C

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

我想在第三方庫中做到這一點,我已經爲此安裝了豆莢。 –

+0

在這種情況下,第三方庫必須具有可以覆蓋該功能的功能,或者可以發佈通知或某種類型的功能塊。還是直接通過它自己打開網址而不通知你? –

+0

當我點擊網址時,它會自動在safari中打開網址。 –

0

你需要斯威夫特和Objective-C之間的橋樑,

  1. 在swift類中添加@objc定義爲:@objc class Abc{}

  2. 構建您的項目,以便Xcode可以爲您自動生成橋文件。

  3. 進口"YourProject-Swift.h"在Objective-C文件

現在,您可以迅速調用類在Objective-C。 希望這可以幫助你。

0

假設你迅速的ViewController具有類似URL變量:

var url: URL! 

並用的loadRequest的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; 
相關問題