从SwiftUI视图调用本地UIViewController函数

问题描述 投票:1回答:1

我正在尝试从ContentView调用本地ViewController函数。该函数使用一些局部变量,不能移到ViewController之外。

class ViewController: UIViewController {
    func doSomething() {...}
} 

extension ViewController : LinkViewDelegate {...}

位于另一个文件上:

struct ContentView: View {

    init() {
        viewController = .init(nibName:nil, bundle:nil)
    }
    var viewController: viewController

var body: some View {
    Button(action: {self.viewController.doSomething()}) {
            Text("Link Account")
        }
    }
}

UIViewController不能更改为类似UIViewRepresentable的东西,因为LinkViewDelegate只能扩展UIViewController。

ios swift view swiftui
1个回答
0
投票

您可以将ViewController的实例作为参数传递给ContentView:

struct ContentView: View {
    var viewController: ViewController // first v lowercase, second one Uppercase

    var body: some View {
        Button(action: { viewController.doSomething() }) { // Lowercase viewController
            Text("Link Account")
        }
    }

    init() {
        self.viewController = .init(nibName:nil, bundle:nil) // Lowercase viewController
    }
} 

// Use it for the UIHostingController in SceneDelegate.swift
window.rootViewController = UIHostingController(rootView: ContentView()) // Uppercase ContentView

更新后的答案以更好地适合该问题。

© www.soinside.com 2019 - 2024. All rights reserved.