在下面的代码中,我试图弄清楚如何使用SwiftUI
按钮执行savePhoto
函数。这实际上是我试图解决的问题的简化版本,但仍然无法解决这个问题。我在ContentView
中创建的按钮是我想象如何解决这个问题的,但由于SwiftUI结构,我好像找不到别的办法。
这里是我的SwiftUI视图:
struct ContentView: View {
var body: some View {
ZStack{
AnotherControllerView()
Button(action: { AnotherControllerView.savePhoto() }){
Text("Save Photo")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
字符串
和我集成的UIViewController:
import Foundation
import SwiftUI
import UIKit
struct AnotherControllerView : UIViewControllerRepresentable {
typealias UIViewControllerType = AnotherController
func makeCoordinator() -> AnotherControllerView.Coordinator {
Coordinator(self)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<AnotherControllerView>) -> AnotherController {
return AnotherController()
}
func updateUIViewController(_ uiViewController: AnotherController, context: UIViewControllerRepresentableContext<AnotherControllerView>) {
}
class Coordinator : NSObject {
var parent : AnotherControllerView
init(_ viewController : AnotherControllerView){
self.parent = viewController
}
}
}
class AnotherController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.blue
}
func savePhoto(){
let alert = UIAlertController(title: "Save Photo to Camera Roll", message: "Would you like to save your drawing to the camera roll?", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil))
alert.addAction(UIAlertAction(title: "Save", style: .default, handler: someHandler))
self.present(alert, animated: true)
}
func someHandler(alert: UIAlertAction!) {
print("Handler executed")
}
}
型
2条答案
按热度按时间cygmwpex1#
你好,为了控制UIViewController,我们需要在View和UIViewControllerRepresentable之间创建一个绑定,让我们在代码中解释一下:首先,你需要在
AnotherControllerView
中声明一个新的带有@Binding
注解的变量。会是这样的:
字符串
因此,在
updateUIViewController
中,我们在那里实现逻辑型
如果你想捕捉一个图像,让我来展示一下我是如何实现的:
型
在身体里我叫它:
型
ecbunoof2#
如果AnotherControllerView很大,而您在新中很少使用它,则可以考虑使用更简单的解决方法。
字符串
这种方法只是提醒我们在某些情况下可以重用一个视图。由于UIView桥不是纯SwiftUI域,您可以尝试这种方法。