
在UIkit時(shí)代,我們可以通過UITextView的方式構(gòu)建可選擇和復(fù)制內(nèi)容的文本。進(jìn)入SwiftUI時(shí)代我們該如何解決這個(gè)問題呢
沒有什么,我們就自己動(dòng)手造
UIViewRepresentable
SwiftUI 給我們提供視圖包裝器(UIViewRepresentable),可以將UIKit控件包裝成SwiftUI世界的原生控件。下面是UIViewRepresentable的介紹
A wrapper for a UIKit view that you use to integrate that view into your SwiftUI view hierarchy.
大白話:
UIKit視圖的包裝器,用于將其集成到SwiftUI視圖層次結(jié)構(gòu)中。
UIViewRepresentable 簡介
我們可以使用UIViewRepresentable在SwiftUI世界中創(chuàng)建和管理UIView對象。在您的項(xiàng)目中可以定義一個(gè)struct來實(shí)現(xiàn)這個(gè)協(xié)議,并使用其方法來創(chuàng)建,更新和拆除視圖。創(chuàng)建和更新過程與SwiftUI視圖的行為類似,您可以使用它們使用程序的當(dāng)前狀態(tài)信息來配置視圖。使用拆解過程從SwiftUI干凈地刪除視圖。例如,您可以使用拆卸過程來通知其他對象該視圖消失。
要將視圖添加到SwiftUI世界,請創(chuàng)建一個(gè)struct實(shí)現(xiàn)UIViewRepresentable協(xié)議。系統(tǒng)在適當(dāng)?shù)臅r(shí)間調(diào)用可表示實(shí)例的方法以創(chuàng)建和更新視圖。以下示例顯示了視圖層次結(jié)構(gòu)中包含自定義MyRepresentedCustomView結(jié)構(gòu)的信息。
struct ContentView: View {
var body: some View {
VStack {
Text("Global Sales")
MyRepresentedCustomView()
}
}
}
系統(tǒng)不會(huì)自動(dòng)將視圖內(nèi)發(fā)生的更改傳達(dá)給SwiftUI界面的其他部分。當(dāng)您希望您的視圖與其他SwiftUI視圖進(jìn)行協(xié)調(diào)時(shí),必須提供一個(gè)Coordinator實(shí)例來促進(jìn)這些交互。例如,您使用target-action來轉(zhuǎn)發(fā)目標(biāo)操作并將消息從您的視圖委托給任何SwiftUI視圖
好了,下面我們來看看如何實(shí)現(xiàn)一個(gè)支持選擇和復(fù)制文本的Text吧!
感謝網(wǎng)友守約七號(hào)提的需求
網(wǎng)友反饋需要不彈出鍵盤,后來研究了一下,實(shí)現(xiàn)起來非常簡單。只需要
uiView.inputView = UIView()