Обновление классов WKInterfaceController до новой структуры / представления SwiftUI - PullRequest
1 голос
/ 15 июня 2019

В настоящее время есть работающее решение для 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), не могу найти что-то для старого. Посмотреть новое ...

Ответы [ 2 ]

0 голосов
/ 01 июля 2019
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)
    }
}
0 голосов
/ 15 июня 2019

Чтобы представить чистый вид SwiftUI, используйте WKHostingController.

Больше информации об этом в этом великолепном видео WWDC 2019: SwiftUI на 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)
    }
}

Интеграция SwiftUI - это видео WWDC, которое вы ищете для повторного использования уже существующих видов.

Это также замечательный ресурс: Создание интерфейсов приложений watchOS с SwiftUI .

...