gpt4 book ai didi

ios - 从 UIKit 调用的 SwiftUI 模式中的关闭按钮

转载 作者:行者123 更新时间:2023-12-01 15:42:46 25 4
gpt4 key购买 nike

我有一个从 UIKit 主视图调用的 SwiftUI 模态视图。我想在我的模态视图中添加一个关闭按钮。正如我所知,UIKit 中没有 @State 变量,所以我正在创建一个单独的 SwiftUI View 来存储我的 @State 变量,但由于某种原因它不起作用。我应该如何解决这个问题?

我在主 ViewController 中的代码:

var hack = StateInUIKitHack()
hack.modalIsPresented = true
let vc = UIHostingController(rootView: MoodCardView(isPresented: hack.$modalIsPresented, entryIndex: entryIndex, note: moodEntries[entryIndex].note ?? ""))
self.present(vc, animated: true, completion: nil)

StateInUIKitHack 结构:
struct stateInUIKitHack: View {
@State var modalIsPresented = false

var body: some View {
Text("Hello, World!")
}
}

在 MoodCardView.swift 我有:
 @Binding var isPresented: Bool

如果我从另一个 SwiftUI View 创建我的模态表,它会关闭它的经典方式,但我需要从 UIKit View 创建它。

最佳答案

这是一个可能的方法的演示。使用 Xcode 11.4/Playground 测试

enter image description here

完整的游乐场代码:

import UIKit
import SwiftUI
import PlaygroundSupport

class ViewModel {
var closeAction: () -> Void = {}
}

struct ModalView: View {
var vm: ViewModel

var body: some View {
VStack {
Text("I'm SwfitUI")
Button("CloseMe") {
self.vm.closeAction()
}
}
}
}

class MyViewController : UIViewController {

override func loadView() {
let view = UIView()
view.backgroundColor = .white

let button = UIButton(type: .roundedRect)
button.setTitle("ShowIt", for: .normal)
button.addTarget(self, action: #selector(MyViewController.showModal(_:)), for: .touchDown)

view.addSubview(button)

button.translatesAutoresizingMaskIntoConstraints = false
button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
self.view = view
}

@objc func showModal(_ : Any?) {
let bridge = ViewModel()
let vc = UIHostingController(rootView: ModalView(vm: bridge))
bridge.closeAction = { [weak vc] in
vc?.dismiss(animated: true)
}
self.present(vc, animated: true, completion: nil)
}
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

关于ios - 从 UIKit 调用的 SwiftUI 模式中的关闭按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62415578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com