实战教程·元宇宙来了,准备好你的电子名片了吗?(四)(3)

简介: 实战教程·元宇宙来了,准备好你的电子名片了吗?(四)

界面设计:在应用内打开浏览器

接下来,我们来学习在跳转到HomePageView页面的同时,打开浏览器并访问对应身份卡片的链接地址。

访问网页需要引用一个新的框架— —WebKit,WebKit是一款开源的浏览器框架,使用WebKit可以实现在应用内访问web网页地址的功能。

首先,我们先引用这个框架,如下代码所示:

import WebKit

然后我们实现下访问网页的方法,如下代码所示:


// MARK: - 网页方法
struct SiteView: UIViewRepresentable, View {
    var indexURL: String
    func makeUIView(context: UIViewRepresentableContext<SiteView>) -> WKWebView {
        return WKWebView()
    }
    func updateUIView(_ uiView: WKWebView, context: UIViewRepresentableContext<SiteView>) {
        let request = URLRequest(url: URL(string: "https://"+indexURL)!)
        uiView.load(request)
    }
}

上述代码中,我们创建了一个结构体SiteView,遵循UIViewRepresentable协议,UIViewRepresentable协议可以将视图添加到SwiftUI界面中,并在适当的时间调用可表示实例的方法以创建和更新视图。

在SiteView网页视图中,通过传入一个String类型链接地址indexURL,调用uiView的WKWebView结构,访问并加载来自indexURL网站的数据,返回内容给到View视图中,实现访问网站的功能。

创建完成后,我们在HomePageView调用它,由于需要传入链接地址,因此在HomePageView中也要声明变量作为链接地址,且链接地址需要来自于ContentView身份卡片的地址,如下代码所示:


struct HomePageView: View {
    var platformName: String
    var indexURL: String
    @Environment(.presentationMode) var presentationMode
    var body: some View {
        NavigationStack {
            SiteView(indexURL: indexURL)
            .navigationBarTitle(platformName, displayMode: .inline)
            .navigationBarBackButtonHidden(true)
            .navigationBarItems(leading: backBtn())
        }
    }
    // 返回按钮
    func backBtn() -> some View {
        Button(action: {
            self.presentationMode.wrappedValue.dismiss()
        }) {
            Image(systemName: "chevron.backward")
                .font(.system(size: 17))
                .foregroundColor(.black)
        }
    }
}
struct HomePageView_Previews: PreviewProvider {
    static var previews: some View {
        HomePageView(platformName: "稀土掘金技术社区", indexURL: "juejin.cn/user/3897092103223517")
    }
}

image.png

上述代码中,我们声明了变量indexURL作为访问的链接地址,并在HomePageView的body视图中使用SiteView网站视图,SiteView网站视图的访问地址绑定声明的变量indexURL。

并且还需要在浏览器预览时添加默认值,便于模拟器预览效果,如下代码所示:

HomePageView(platformName: "稀土掘金技术社区", indexURL: "juejin.cn/user/3897092103223517")

由于HomePageView声明了变量indexURL,因此我们还要回到ContentView中给HomePageView声明的变量赋值,如下代码所示:


HomePageView(platformName:item.platformName, indexURL: item.indexURL)

image.png

项目预览

完成后,我们回到ContentView视图,在模拟器中预览下整体的效果,如下图所示:

项目小结

在本章中,我们学习了基于NavigationStack顶部导航菜单的跳转方法NavigationLink,并实现了自定义返回按钮及其操作。在本章核心内容,我们接触了一个新的框架WebKit,通过使用UIViewRepresentableContext和View视图,实现在应用内访问网页链接的功能。

电子名片本质上是一款短链接聚合工具,通过生成URL分享进行裂变,如此看来,Linkworld基本可以链接一切内容,如建立个人作品库,或者分享所有社交帐号集,亦或者管理自己的自媒体帐号等等,都可以通过Linkworld实现。

简单,但有趣。

相关文章
|
存储 JSON 缓存
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(1)
实战教程·元宇宙来了,准备好你的电子名片了吗?
78 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(1)
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(3)
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)
38 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(3)
|
JSON API 数据格式
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)(4)
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)
63 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(5)
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)
49 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(5)
|
数据库
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(4)
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)
51 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(4)
|
存储 前端开发 数据库
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(6)
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)
60 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(6)
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(2)
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)
60 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(2)
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(4)
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)
56 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(4)
|
程序员 人机交互 Swift
实战教程·元宇宙来了,准备好你的电子名片了吗?(六)(3)
实战教程·元宇宙来了,准备好你的电子名片了吗?(六)
66 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(六)(3)
|
存储 前端开发 Swift
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)(1)
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)
55 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)(1)