小编Ish*_*eet的帖子

SwiftUI:单击按钮时如何显示视图?

我正在尝试使用 Apple 的SwiftUI制作一个应用程序,我需要有两个按钮在List一行中显示两个不同的视图。

我使用Xcode beta 7MacOS Catalina beta 7。我试图添加一个Button呈现视图但是,我无法点击它,当我尝试在一个简单的Button外部List并点击它时,该AddList()视图没有出现。我也试过添加一个navigationButton内部,navigationButton但它也不起作用。tapAction单击它时添加一个也不起作用,视图仍然没有出现

NavigationView {
            List(0..<5) { item in
                NavigationLink(destination: ContentOfList()) {
                    Text("hello") // dummy text
                    Spacer()
                    Text("edit")
                        .tapAction {
                            AddList() // This is the view I want to present
                    }
                }
                }.navigationBarItems(trailing: NavigationLink(destination: AddList(), label: { // doesn't work within navigationBarItems
                    Image(systemName: "plus.circle.fill")
                }))
        }

Run Code Online (Sandbox Code Playgroud)

我希望AddList()视图出现,但在这两种情况下,它没有。

swift swiftui swiftui-navigationlink

6
推荐指数
2
解决办法
2万
查看次数

当我使用属性更新视图时,ObservedObject 会重置。因此会导致数据丢失

我有一个问题,当ViewModel视图更新时会重新初始化。

我有 2 个视图,SongListView它们PlayerView共享一个Player. 当玩家的播放状态改变时(isPlaying == true)viewModelinSongListView重置并变为空数组。因此,我视图中的列表变为空。

在此输入图像描述

歌曲列表查看:

struct SongListView: View {

    @ObservedObject var model: SongListViewModel = SongListViewModel() // This resets when player.isPlaying is set to true

    @ObservedObject var player: Player

    var body: some View {

        List(model.songs, id: \.id) { song in
            Button(action: {
                self.player.play(link: song.link)
            }) {
                TitleRowView(title: song)
            }
        }
        .onAppear {
            self.model.get()
        }
        .navigationBarTitle(Text("Songs"), displayMode: .inline)
    }
}
Run Code Online (Sandbox Code Playgroud)

歌曲列表视图模型:

class SongListViewModel: ObservableObject { …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui observableobject

4
推荐指数
2
解决办法
3925
查看次数