Ios 如何在Objective c xib类中导航viewcontroller(以swift制作)

Ios 如何在Objective c xib类中导航viewcontroller(以swift制作),ios,objective-c,swift,swift3,jsqmessagesviewcontroller,Ios,Objective C,Swift,Swift3,Jsqmessagesviewcontroller,我使用JSQMessagesViewController库进行聊天。聊天室可能包含URL。如果用户单击url,则该url将在safari中打开 我想在我自己的视图控制器中打开url,该控制器具有webview。但我不知道如何在swift制造的objective c中导航viewcontroller - (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange

我使用JSQMessagesViewController库进行聊天。聊天室可能包含URL。如果用户单击url,则该url将在safari中打开

我想在我自己的视图控制器中打开url,该控制器具有webview。但我不知道如何在swift制造的objective c中导航viewcontroller

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

但我不知道如何在objective c中导航viewcontroller 这是用斯威夫特制造的

使用桥接标题
使您的swift viewcontroller在objective-c代码中可见,然后您可以使用普通程序推送viewcontroller

MySwiftVC *vc = [MySwiftVC init....];
vc.someProperty = Blah blah...;
[self.navigationController pushViewController:vc animated:true];
用于框架(如Cocoapods)

对于项目(例如,手动拖动)


如果你想访问你的Objective-C类,你需要一个桥接头,在那里你必须导入你的Objective-C头文件

如果您想访问Objective-C中的Swift类,您必须导入Swift.h,它是由Xcode Memory自动生成的头文件。swift.h文件的全名为(yourprojectname swift.h),例如
示例swift.h

#import "yourprojectname-Swift.h"
现在,您可以在objective-C中访问ViewController

// Name of your Swift View Controller
YourSwiftViewController *yourSwiftVC = [[YourSwiftViewController alloc] init];
[self.navigationController pushViewController:yourSwiftVC animated:YES];
现在,您可以像使用objective-C一样使用SwiftViewController

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

你需要在Swift和objective-c之间架起一座桥梁

  • 在swift类中添加@objc定义如下:
    @objc类Abc{}

  • 构建您的项目,以便Xcode可以自动为您生成桥接文件

  • 在objective-c文件中导入“YourProject Swift.h”

  • 现在您可以在objective-C中调用swift类。
    希望这对您有所帮助。

    假设您的swift ViewController有一个URL变量,如:

    var url: URL!
    
    并使用url加载请求

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        webView.loadRequest(URLRequest(url: url))
    }
    
    在目标C类中包括Swift类参考,如下所示

    #import "<productName>-Swift.h"
    

    我正在使用JSQMessagesLibrary,我想在library中导航,但我怎么做呢?你需要对它进行子类化,覆盖在Safari中打开url的函数,并使用自定义控件,比如
    CustomJSQMessagesLibrary
    ,而不是
    JSQMessagesLibrary
    无处不在。我想在第三方库中这样做,我已经为此安装了POD。在这种情况下,第三方库必须有一个功能,您可以覆盖该功能,否则它可能会发布通知或某种阻止。或者它自己直接打开url而不通知您吗?当我单击url时,它会在safari中自动打开url。我想您必须查看其中文档[JSQMessageCollectionViewCellDelegate协议参考]()我不知道如何保存URL,在JSQMessages文档中也没有找到任何可以打开任何视图的内容。别忘了他们也有tableViewCells的委托,你必须深入挖掘这些委托
    #import "<productName>-Swift.h"
    
    SwiftWebViewController *vc = [[SwiftWebViewController alloc] init];
    vc.url = URL;
    [self presentViewController:vc animated:YES completion:nil];
    
    return NO;