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 中的选择更改

NavigationLink 中的 SwiftUI 按钮

tvOS:当它像这样实现时无法滚动 UICollectionView 项目:UITableView 内的 UICollectionView

SWIFTUI 按钮或 NavigationLink?