在上下文菜单中添加导航链接

时间:2020-10-12 05:38:22

标签: ios swiftui swiftui-navigationlink

这个问题是基于我之前的两个问题,但是我问的是因为当我回答这些答案时,我没有得到有帮助的回答。我已经在线浏览了多个答案,人们似乎也遇到了类似的问题,即导航链接在上下文菜单中不起作用。

@State private var selectedBook: Book? = nil

//...other code

ForEach(bookData){ bookDetail in
    BookView(book: bookDetail)
    .background(NavigationLink(destination: EditBook(book: bookDetail), tag: bookDetail, selection: $selectedBook){ EmptyView() })
    .contextMenu{
       Button(action: {
           self.selectedBook = bookDetail
       }) {
           Label("Edit", systemImage: "pencil")
          }

       Button(action: {
           //Delete action
       }) {
           abel("Delete", systemImage: "trash")
          }
    }

基本上,在我的第一个问题中,我没有第一个按钮下方的导航链接,而解决方案使用的是bool @State变量和.background修饰符,但由于该链接未传递正确的视图,每个问题(第二个问题),现在我已经掌握了这段代码。

我的问题是.background修饰符在绑定到的视图的轻按以及上下文菜单的轻触上打开导航链接中的视图。我需要轻按一下操作才能打开其他视图,所以我只希望在按下上下文菜单时打开当前的导航链接。

2 个答案:

答案 0 :(得分:0)

您可以尝试将BookView放入ZStack并仅将Navigation Link放入其中吗?类似于您的BookView和.background的东西:

        ZStack {
            NavigationLink(destination: EditBook(book: bookDetail), isActive: $selectedBook, label: { EmptyView() })
            
            BookView(book: bookDetail)
        }

答案 1 :(得分:0)

我的第一个答案的派生词应该起作用。这是一个更完整的版本:

struct TestView: View {
    
    @State private var selectedBook: String = ""
    @State private var showSelectedBookView: Bool = false
    
    let books = [
        "BOOK1",
        "BOOK2",
        "BOOK3",
        "BOOK4",
        "BOOK5",
        "BOOK6",
        "BOOK7",
    ]
    
    var body: some View {

        ZStack {
            NavigationLink(destination: Text("SELECTED BOOK IS: \(selectedBook)"), isActive: $showSelectedBookView, label: { EmptyView() })

            VStack(spacing: 20) {
                ForEach(books, id: \.self) { book in
                    Text(book)
                        .contextMenu(ContextMenu(menuItems: {
                            Button(action: {
                                self.selectedBook = book
                                self.showSelectedBookView.toggle()
                            }, label: {
                                Label("Edit", systemImage: "pencil")
                            })
                            
                            Button(action: {
                                 
                            }, label: {
                                Label("Delete", systemImage: "trash")
                            })

                        }))
                }
            }
        }
        
    }
}