NavigationLink 内的 tvOS 按钮不起作用
Posted
技术标签:
【中文标题】NavigationLink 内的 tvOS 按钮不起作用【英文标题】:tvOS Button inside NavigationLink is not Working 【发布时间】:2020-05-15 19:40:12 【问题描述】:我已经使用 swift 和 swiftui 构建了一个 ios 应用程序,现在我正在开发该应用程序的 tvOS 版本。但是,我有几个问题。其中一个问题仍未解决:tvOS Textfield Transparent Background 我正在创建一个登录页面,我意识到 NavigationLink 中的按钮没有做任何事情。然后为了测试和识别问题,我创建了一个简单的按钮,如下所示:
Button(action:
print("Login pressed")
)
Text("Login")
.frame(width:300, height: 35)
.background(Color.blue)
.foregroundColor(Color.white)
点击后的输出:
Login pressed
它看起来像这样:
聚焦时看起来像这样:
但是当我在 NavigationLink 中插入那个按钮时,导航就像一个按钮,而这个按钮什么也不做。
代码是这样的:
NavigationLink(destination: mainScene(), tag:1, selection: $selection)
Button(action:
print("Login pressed")
self.selection = 1
)
Text("Login")
.frame(width:300, height: 35)
.background(Color.blue)
.foregroundColor(Color.white)
在 iOS 中,我有一个类似的代码,它不会导航,直到按钮操作中的所有内容都执行并且选择等于 1。但是在此,它不执行任何操作,它只是直接导航到下一个页。当我将它嵌入到 NavigationLink 中时,该按钮看起来像这样:
如您所见,原始登录按钮周围有空白区域,焦点位于该空白区域。当点击它导航。 NavigationLink 看起来像一个按钮,但它也阻止了按钮操作的执行。我有这些主要是由焦点引起的问题。例如在上图中,您可以看到当焦点打开时按钮的形状和颜色会发生变化,但我想控制它。但是,我不知道如何在项目的焦点设计上发挥作用。
【问题讨论】:
【参考方案1】:试试下面的
Button(action:
print("Login pressed")
self.selection = 1
)
Text("Login")
.frame(width:300, height: 35)
.background(Color.blue)
.foregroundColor(Color.white)
.background(NavigationLink(destination: mainScene(), tag:1,
selection: $selection) EmptyView() )
【讨论】:
感谢您的回答。它解决了导航问题,但按钮和文本字段的样式和外观仍然很糟糕。你有什么好的资源吗?【参考方案2】:试试这个:
NavigationLink(destination: mainScene(), tag:1, selection: $selection)
Button(action:
print("Login pressed")
self.selection = 1
)
Text("Login")
.frame(width:300, height: 35)
.background(Color.blue)
.foregroundColor(Color.white)
.buttonStyle(PlainButtonStyle())
【讨论】:
以上是关于NavigationLink 内的 tvOS 按钮不起作用的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:NavigationLink 内的水平 ScrollView 会中断导航
多行文本在 SwiftUI 列表内的 NavigationLink 中不起作用
SwiftUI:检测 tvOS 上 NavigationView 中的选择更改
tvOS:当它像这样实现时无法滚动 UICollectionView 项目:UITableView 内的 UICollectionView