当前在iOS和watchOS上具有正在运行的解决方案。随着即将到来的SwiftUI的好消息,越来越多的可能性以及我们对此的怀疑。 我的问题是:我有很多:
import WatchKit
import Foundation
class LoginInterfaceController : WKInterfaceController {
@IBOutlet weak var label: WKInterfaceLabel!
var timer: Timer!
var connection = true
...```
我想将这些视图转换为此:
```import SwiftUI
@available(watchOSApplicationExtension 6.0, *)
struct FirstView: View {
var body: some View {
LoginView(email: "", pass: "")
}
}
@available(watchOSApplicationExtension 6.0, *)
struct LoginView : View {
@State var email: String
@State var pass: String
var body: some View {
VStack(alignment: .leading) {
...```
如何调用和显示新视图?今天,我称呼类似presentController(withName: "LoginPlease", context: text)
的东西,找不到适合旧视图的东西,而要呈现新的视图...
答案 0 :(得分:0)
要显示纯SwiftUI视图,请使用WKHostingController
。
有关此WWDC 2019精彩视频的更多信息:SwiftUI on watchOS。
示例:
class HostingController: WKHostingController<MyView> {
override var body: MyView {
MyView()
}
}
要重用现有的接口对象,请创建一个符合WKInterfaceObjectRepresentable
的结构。
示例:
struct WatchMapView: WKInterfaceObjectRepresentable {
var landmark: Landmark
func makeWKInterfaceObject(context: WKInterfaceObjectRepresentableContext<WatchMapView>) -> WKInterfaceMap {
// Return the interface object that the view displays.
return WKInterfaceMap()
}
func updateWKInterfaceObject(_ map: WKInterfaceMap, context: WKInterfaceObjectRepresentableContext<WatchMapView>) {
// Update the interface object.
let span = MKCoordinateSpan(latitudeDelta: 0.02,
longitudeDelta: 0.02)
let region = MKCoordinateRegion(
center: landmark.locationCoordinate,
span: span)
map.setRegion(region)
}
}
Integrating SwiftUI是重用现有视图时要查找的WWDC视频。
这也是一个很棒的资源:Building watchOS App Interfaces with SwiftUI。
答案 1 :(得分:0)
struct MainView : View {
let host: HostingController!
var body: some View {
List {
ListCell(icon: "list_ic_playing", title: "正在播放").tapAction {
self.host.presentNowPlaying()
}
}
.navigationBarTitle(Text("喜马拉雅"))
}
}
class HostingController : WKHostingController<MainView> {
override var body: MainView {
return MainView(host: self)
}
func presentNowPlaying() {
self.presentController(withNames: ["PlayList", "NowPlaying"], contexts: nil)
}
}