SwiftUI开发教程系列 - 第十三章:SwiftUI 与 UIKit 集成

在 iOS 开发中,SwiftUI 和 UIKit 是两种不同的用户界面框架。SwiftUI 是一款声明式框架,简洁易用;而 UIKit 是较为成熟的框架,功能丰富且灵活。因此,当需要使用 UIKit 独有的功能时,可以将其嵌入 SwiftUI 项目中。本章将带你了解如何在 SwiftUI 中使用 UIKit 视图,并介绍常见的集成场景和操作步骤。

SwiftUI 与 UIKit 集成可以通过 UIViewRepresentable 和 UIViewControllerRepresentable 协议实现,使得我们可以在 SwiftUI 项目中直接嵌入 UIKit 视图或视图控制器。

13.1 UIViewRepresentable 和 UIViewControllerRepresentable 的核心方法

  • makeUIView(context:) 或 makeUIViewController(context:):负责初始化并返回 UIKit 视图或视图控制器。
  • updateUIView(:context:) 或 updateUIViewController(:context:):用于更新视图内容,每当 SwiftUI 视图状态发生变化时,调用该方法以刷新显示。

13.2 使用 UIViewRepresentable 集成 UIKit 视图

下面示例展示了如何将 UIKit 的 UITextView 嵌入到 SwiftUI 中:

示例:嵌入 UITextView

import SwiftUI
import UIKit

// 创建一个自定义的 TextView 结构体,遵循 UIViewRepresentable 协议
struct TextView: UIViewRepresentable {
   
   
    // 用于绑定 SwiftUI 的 @State 值,将文本内容传递给 UIKit 组件
    @Binding var text: String

    // 创建 UITextView 实例
    func makeUIView(context: Context) -> UITextView {
   
   
        let textView = UITextView()
        // 设置代理为 context.coordinator,以便监听输入事件
        textView.delegate = context.coordinator
        return textView
    }

    // 当 SwiftUI 中的 text 值变化时,更新 UITextView 显示的文本
    func updateUIView(_ uiView: UITextView, context: Context) {
   
   
        uiView.text = text
    }

    // 创建并返回一个协调器 (Coordinator) 实例
    func makeCoordinator() -> Coordinator {
   
   
        Coordinator(self)
    }

    // 定义 Coordinator 类,作为 UITextView 的代理,处理文本变化
    class Coordinator: NSObject, UITextViewDelegate {
   
   
        var parent: TextView

        init(_ parent: TextView) {
   
   
            self.parent = parent
        }

        // 当 UITextView 中的文本发生变化时,更新 SwiftUI 中绑定的 text 值
        func textViewDidChange(_ textView: UITextView) {
   
   
            parent.text = textView.text
        }
    }
}
  • makeUIView 方法负责创建并返回一个 UITextView 实例。
  • updateUIView 方法在 SwiftUI 状态更新时被调用,用于确保 UITextView 与 @Binding 的 text 同步。
  • Coordinator 类实现了 UITextViewDelegate 协议,用于监听用户的文本输入,并将输入内容同步回 SwiftUI。

在 SwiftUI 中使用 TextView


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁代码

如果帮助了你,不妨也帮助我一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值