我正在使用JSQMessagesViewController库进行聊天。聊天可能包含网址。如果用户单击该网址,则该网址将在 safari 中打开。
我想在我自己的具有 Web 视图的视图控制器中打开 url。但是我不知道如何在 swift 中的目标 c 中导航视图控制器。
- (BOOL)textView:(UITextView *)textView
shouldInteractWithURL:(NSURL *)URL
inRange:(NSRange)characterRange
interaction:(UITextItemInteraction)interaction
{
// Navigate to next VC
return NO;
}
提前谢谢你。
但我不知道如何在目标 c 中导航视图控制器 这是用斯威夫特制造的。
Use bridging header
让你的 swift viewcontroller 在 Objective-C 代码中可见,那么你可以使用普通过程推送视图控制器。
MySwiftVC *vc = [MySwiftVC init....];
vc.someProperty = Blah blah...;
[self.navigationController pushViewController:vc animated:true];
你需要 Swift 和 objective-c 之间的桥梁,
-
在 swift 类定义中添加@objc,例如:
@objc class Abc{}
。 -
构建您的项目,以便 Xcode 可以自动生成桥接文件。
-
导入 objective-c 文件中的
"YourProject-Swift.h"
现在你可以在 objective-C 中调用 swift 类。希望这对你有帮助。
类,你需要一个桥接头,你必须在其中导入你的Objective-C头文件。
如果你想在 Objective-C 中访问 Swift 类,你必须导入 swift.h,这是一个由 Xcode 记住自动生成的头文件。swift.h 文件的完整名称将是 (yourprojectname-Swift.h(,例如 Example-Swift.h
#import "yourprojectname-Swift.h"
现在你可以在你的目标-C中访问你的视图控制器
现在,你可以像使用你的 objective-C 一样使用 swiftViewController
。// Name of your Swift View Controller
YourSwiftViewController *yourSwiftVC = [[YourSwiftViewController alloc] init];
[self.navigationController pushViewController:yourSwiftVC animated:YES];
假设你的 swift ViewController 有一个 URL 变量,如下所示:
var url: URL!
并使用网址加载请求。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
webView.loadRequest(URLRequest(url: url))
}
在 Objective-C 类中包含 Swift 类引用,如下所示
#import "<productName>-Swift.h"
在你的上下文中,Objective-C 控制器在处理文本视图时应该与 URL 交互
SwiftWebViewController *vc = [[SwiftWebViewController alloc] init];
vc.url = URL;
[self presentViewController:vc animated:YES completion:nil];
return NO;
for framework (e. Cocoapods(
@import frameworkName
对于项目(例如手动拖动(
#import "projectName-Swift.h"
并使用它