导航链接错误
NavigationLink Bug
我有这两种看法:
import SwiftUI
import QGrid
struct CategoriasCanales: View {
@Binding var logueado:Bool
@ObservedObject var categorias = CargarCategoriasCanales()
var body: some View {
NavigationView{
QGrid(self.categorias.listaCategoriasCanales, columns: 3){item in
NavigationLink(destination:VerCanales(categoria: item.categoryID)){
Text(item.categoryName).frame(width:400, height:50)
}
}
}
}
}
和
import SwiftUI
import QGrid
struct VerCanales: View {
private var categoria: String
@ObservedObject private var canales: CargarCanales
init(categoria: String) {
print(categoria)
self.categoria = categoria
self.canales = CargarCanales(categoriaID: categoria)
}
var body: some View {
NavigationView{
QGrid(self.canales.listaCanales, columns: 3){item in
NavigationLink(destination:PlayerVersa(canalID: item.streamID)){
Text(item.name).frame(width:400, height:50)
}
}
}
}
}
问题是当我进入“CategoriasCanales”视图时,它运行“VerCanales”视图的初始化次数等于类别数。
我是 SwiftUI 的新手,例如在 DART 中,ChannelView init 中的 Print() 只会打印我作为参数发送的类别,而不是所有类别。
尝试使用 onAppear 而不是 init
var body: some View {
NavigationView{
QGrid(self.canales.listaCanales, columns: 3){item in
NavigationLink(destination:PlayerVersa(canalID: item.streamID)){
Text(item.name).frame(width:400, height:50)
}
}
}
.onAppear {
print(categoria)
self.categoria = categoria
self.canales = CargarCanales(categoriaID: categoria)
}
}
NavigationLink
创建目标视图代替初始化,因此您看到调用的 VerCanales.init
与 self.categorias.listaCategoriasCanales
计数一样多。
我假设您想推迟创建 VerCanales
:(使用 中的 DeferView
)
NavigationLink(destination:DeferView { VerCanales(categoria: item.categoryID) }){
Text(item.categoryName).frame(width:400, height:50)
}
注意:您不需要 VerCanales
中的第二个 NavigationView
,只有一个导航视图应该在导航堆栈中,并且已经在 CategoriasCanales
我有这两种看法:
import SwiftUI
import QGrid
struct CategoriasCanales: View {
@Binding var logueado:Bool
@ObservedObject var categorias = CargarCategoriasCanales()
var body: some View {
NavigationView{
QGrid(self.categorias.listaCategoriasCanales, columns: 3){item in
NavigationLink(destination:VerCanales(categoria: item.categoryID)){
Text(item.categoryName).frame(width:400, height:50)
}
}
}
}
}
和
import SwiftUI
import QGrid
struct VerCanales: View {
private var categoria: String
@ObservedObject private var canales: CargarCanales
init(categoria: String) {
print(categoria)
self.categoria = categoria
self.canales = CargarCanales(categoriaID: categoria)
}
var body: some View {
NavigationView{
QGrid(self.canales.listaCanales, columns: 3){item in
NavigationLink(destination:PlayerVersa(canalID: item.streamID)){
Text(item.name).frame(width:400, height:50)
}
}
}
}
}
问题是当我进入“CategoriasCanales”视图时,它运行“VerCanales”视图的初始化次数等于类别数。
我是 SwiftUI 的新手,例如在 DART 中,ChannelView init 中的 Print() 只会打印我作为参数发送的类别,而不是所有类别。
尝试使用 onAppear 而不是 init
var body: some View {
NavigationView{
QGrid(self.canales.listaCanales, columns: 3){item in
NavigationLink(destination:PlayerVersa(canalID: item.streamID)){
Text(item.name).frame(width:400, height:50)
}
}
}
.onAppear {
print(categoria)
self.categoria = categoria
self.canales = CargarCanales(categoriaID: categoria)
}
}
NavigationLink
创建目标视图代替初始化,因此您看到调用的 VerCanales.init
与 self.categorias.listaCategoriasCanales
计数一样多。
我假设您想推迟创建 VerCanales
:(使用 DeferView
)
NavigationLink(destination:DeferView { VerCanales(categoria: item.categoryID) }){
Text(item.categoryName).frame(width:400, height:50)
}
注意:您不需要 VerCanales
中的第二个 NavigationView
,只有一个导航视图应该在导航堆栈中,并且已经在 CategoriasCanales