Навигация между View в приложении для mac OS [SwiftUI]

macos

#1

Доброго времени суток.

Пишу приложение для mac OS на SwiftUI. Не получается разобраться с навигацией в приложении.
В ContentView есть элементы типа View (по типу главного экрана в приложении Команды), при нажатии на которые нужно реализовать переход к другому View.
Подскажите, как можно реализовать переход к другому View?


#2

NavigationLink посмотрите


#3

В приложениях для mac OS NavigationLink работает по другому принципу.


#4

В смысле по другому? Вам нужен переход к другому вью, NavigationLink его осуществляет.
Что конкретно вам нужно?


#5

В приложении для mac OS через NavigationLink открывается всплывающее окно, а не другое View.


#6

Теперь более понятно. Раз уж полезли в десктопную разработку SwiftUI, советую разобраться с @ViewBuilder. Он легко гуллится, ссылку приводить не буду. Там вы сможете легко контекстом любых вьюх управлять.


#7

Вот простой пример, как куча вью рулится в зависимости от условия:

import SwiftUI

struct RightView: View {
    @ObservedObject var viewModel: ViewModel
    
    @ViewBuilder
    var body: some View {
        switch viewModel.currentType.viewType {
            case .iosAppIcon: IosAppIconView(viewModel: viewModel)
            case .iosMessageIcon: IosMessageIconView(viewModel: viewModel)
            case .watchAppIcon: WatchAppIconView(viewModel: viewModel)
            case .watchComplication: WatchComplicationView(viewModel: viewModel)
            case .macAppIcon: MacAppIconView(viewModel: viewModel)
            case .universalCatalyst: UniversalCatalystView(viewModel: viewModel)
            case .universalImageAsset: UniversalImageAssetView(viewModel: viewModel)
        }
    }
}

#8

Сделал подобным образом. Оба View отображаются друг с другом (первое, на котором происходит событие, и второе, которое должно отобразиться после события на первом View).


#9

Выразите свои мысли более определенно.

  • в чем проблема
  • чего именно хотите добиться
  • что делали для этого
  • любая полезная дополнительная информация

Пока это выглядит примерно так: у меня не получается сделать непонятно что, помогите хелп


#10

Пишу приложение для mac OS на SwiftUI. При нажатии на инвестиционный портфель (см. скрин 1) необходимо перейти к другому View.

Скрин 1: View со списком инвестиционных портфелей

Пробовал использовать NavigationLink, но в документации от Apple написано, что NavigationLink для iOS и mac OS работает по-разному. В итоге View, к которому необходимо перейти открывается в подобном окне (см. скрин 2). На скрине окно выбора эмодзи, в качестве примера.

Скрин 2: Открытие View с использованием NavigationLink

Пробовал так же .onTapGesture. Переход к другому View не происходит. Получилось только вывести сообщение в консоль через print.

Использовал @ViewBuilder и switch. Переход к другому View не происходит. Первое и второе View отображаются на одном экране.

В качестве примера можно посмотреть стандартное приложение Музыка. При нажатии на обложкку альбома отображается View со всеми треками из альбома. Именно такой переход мне и нужен.


#11

На выходных попробую воспроизвести эту задачу


#12

Спасибо! Если нагуглю другие способы, то отпишусь здесь.