SwiftUI в MacOS: вызов функции при нажатии NavigationLink

Моя потребность проста, но я не могу придумать способ (и многие сообщения довольно сложные или старые / для iOS).

У меня есть NavigationView с NavigationLink, и все работает нормально. По определенным причинам я хотел бы знать элемент, на который щелкнул пользователь, потому что он используется для других действий в представлении.

Я попытался поместить кнопку в NavigationView, но затем срабатывает только действие кнопки, но ссылка не работает.

Я попробовал OnTapGesture - тогда функция срабатывает, но не распространяется, поэтому подробное представление никогда не отображается.

Что мне не хватает? Есть ли способ сделать это без чрезмерного усложнения?

ForEach(anArray, id: \.self) { entry in
    NavigationLink(destination: SettingsView(s: entry)
    {
         Text("something")
    }.onTapGesture {print("Hello")}
}


person Gerry    schedule 11.05.2020    source источник


Ответы (1)


Вот решение, на самом деле используйте кнопку, которая выполняет какое-то действие и активирует ссылку

Протестировано с Xcode 11.5b2

   @State private var activatedLink: Int? = nil

   // ... other code

   ForEach(Array(anArray.enumerated()), id: \.element) { (i, entry) in
        Button("something") {
            print(">> some action")

            self.activatedLink = i   // << order might be important !!
        }.background(
            NavigationLink(destination: SettingsView(s: entry), tag: i, selection: $activatedLink) { EmptyView() }
               .buttonStyle(PlainButtonStyle()) // << required !!
        )
   }
person Asperi    schedule 11.05.2020
comment
очень умно, я попробую сегодня позже. Аспери - ты вроде гений Swift :) - person Gerry; 11.05.2020