我有一个共享视图控制器连接到一个列表.当用户点击列表行时,共享视图应该弹出并显示点击列表的内容.问题是,当我启动应用程序并点击列表项时,共享视图文本为空,如果我点击第二个不同的项目,它会显示内容:

//示例:启动应用程序,单击列表1并查看没有显示任何内容,然后单击列表2并显示内容.

我怎样才能使你第一次点击列表时,内容显示在ShareView控制器中.这是一个小项目

import SwiftUI

struct ContentView: View {
    let StringList = ["List 1","List 2","List 3","List 4","List 5"]
    @State var TextExample = ""
    @State var IsOpen = false
    var body: some View {
        List {
            ForEach(StringList, id: \.self) { string in
                Text(string)
                    .onTapGesture {
                        TextExample = string
                        IsOpen = true
                    }
            }
        }.background(SharingViewController(isPresenting: $IsOpen) {
            print("\(TextExample)")
            let av = UIActivityViewController(activityItems: [TextExample], applicationActivities: nil)
            av.completionWithItemsHandler = { _, _, _, _ in
                IsOpen = false // required for re-open !!!
               }
               
            return av
        })
    }
}

struct SharingViewController: UIViewControllerRepresentable {
    @Binding var isPresenting: Bool

    var content: () -> UIViewController

    func makeUIViewController(context: Context) -> UIViewController {
        UIViewController()
    }

    func updateUIViewController(_ uiViewController: UIViewController, context: Context) {

        if isPresenting  {
            uiViewController.present(content(), animated: true, completion: nil)

        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

任何建议都很好

推荐答案

我不确定这是否是一个老错误,但我以前见过这个.

然而,我发现使用@StateObject类及其子变量@Published而不是局部变量@State绑定数据解决了这个问题.

下面是我测试的工作代码.还有,这里有一个视频链接:https://drive.google.com/file/d/1ItlOf33vasO9WFRDokUq_PXLzUpR8UBa/view?usp=sharing

class VM : ObservableObject {
  @Published var storedText = "" //added
}

struct ContentView: View {
@StateObject var viewModel = VM() //added
let StringList = ["List 1","List 2","List 3","List 4","List 5"]
@State var TextExample = ""
@State var IsOpen = false
var body: some View {
    List {
        ForEach(StringList, id: \.self) { string in
            Text(string)
                .onTapGesture {
                    viewModel.storedText = string //added
                    IsOpen = true
                }
        }
    }.background(
        SharingViewController(isPresenting: $IsOpen) {
        print("\(viewModel.storedText)") //added
        let av = UIActivityViewController(activityItems: [viewModel.storedText], applicationActivities: nil) //added
        av.completionWithItemsHandler = { _, _, _, _ in
            IsOpen = false // required for re-open !!!
           }
        return av
    })
}
}

struct SharingViewController: UIViewControllerRepresentable {
@Binding var isPresenting: Bool

var content: () -> UIViewController

func makeUIViewController(context: Context) -> UIViewController {
    UIViewController()
}

func updateUIViewController(_ uiViewController: UIViewController, context: Context) {

    if isPresenting  {
        uiViewController.present(content(), animated: true, completion: nil)

    }
}
}

Ios相关问答推荐

更新@PersistableEnum时是否需要执行迁移块?

如何创建具有SPM依赖项的二进制XCFramework?

XcodeCloud生成失败,返回";ci_pre_xcodeBuild.sh是可执行文件,但退出时返回2个退出代码.";

SWIFT-仅解码感兴趣的元素

无法向委托发送数据

如何在 SwiftUI 中通过通用 @ObservedObject 进行切换?

Apple Metal iOS 为什么 GLKMatrix4MakeLookAt 来回摇摆

动画文本位置

如何在 SwiftUI 视图中显示协议视图?

过渡动画在 iOS16 中不起作用,但在 iOS15 中起作用

渲染的海边重定向在物理 iOS 设备上不起作用

Xcode 13.4.1 (13F100)Command CodeSign 失败,退出代码非零我应该删除哪个证书?

将值传递给导航链接视图中的文本框

SwiftUI - 使用切换switch 切换键盘类型(默认/数字)?

搜索在 ios xamarin.forms 中不起作用

使用实时数据库的应用程序无法在被 Firebase 阻止的罗马尼亚 ISP 中运行

如何在保持纵横比的同时zoom UIView 的内容以适应目标矩形?

检测 iPhone/iPad/iPod touch 的 colored颜色 ?

针对 Xcode 中的 iPad 选项

是否可以将 Socket.io 与 AWS Lambda 一起使用?