widgetURL переопределяется внутри Foreach?

Я показываю 3 строки в виджете среднего размера iOS 14, как показано ниже:

 row 1
-------
 row 2
-------
 row 3
-------

моя структура просмотра здесь:

VStack {
    ForEach(records, id: \.id) { item in 
        ZStack {
            // some views
        }
        .widgetURL(URL(string: "wig://\(item.id)"))
    }
    Divider()
}

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

как правильно добавить ссылку на контент для просмотров, созданных с помощью ForEach?


person Frank    schedule 14.10.2020    source источник


Ответы (1)


Вот интерфейсный контракт (обратите внимание на отмеченный)

    /// Sets the URL to open in the containing app when the user clicks the widget.
    /// - Parameter url: The URL to open in the containing app.
    /// - Returns: A view that opens the specified URL when the user clicks
    ///   the widget.
    ///
>>    /// Widgets support one `widgetURL` modifier in their view hierarchy.
>>    /// If multiple views have `widgetURL` modifiers, the behavior is
    /// undefined.
    public func widgetURL(_ url: URL?) -> some View

Вместо этого вы должны использовать Link, например

    ForEach(records, id: \.id) { item in 
       Link(destination: URL(string: "wig://\(item.id)")!) {
         ZStack {
            // some views
         }
       }
    }
person Asperi    schedule 14.10.2020