如何摆脱 SwiftUI TextFields 周围的蓝色选择边框?

Posted

技术标签:

【中文标题】如何摆脱 SwiftUI TextFields 周围的蓝色选择边框?【英文标题】:How to get rid of the blue selection border around SwiftUI TextFields? 【发布时间】:2020-01-15 15:50:17 【问题描述】:

我使用以下代码创建了两个文本字段:


VStack (spacing: geometry.size.width/48) 
    TextField("World Name", text: self.$WorldName)
        .font(.system(size: geometry.size.width/28))
        .textFieldStyle(PlainTextFieldStyle())
        .frame(width: geometry.size.width*0.75)
        .background(
            RoundedRectangle(cornerRadius: 8)
                .fill(Color.init(white: 0.28))
    )
    TextField("World Seed", text: self.$WorldSeed)
        .font(.system(size: geometry.size.width/28))
        .textFieldStyle(PlainTextFieldStyle())
        .frame(width: geometry.size.width*0.75)
        .background(
            RoundedRectangle(cornerRadius: 8)
                .fill(Color.init(white: 0.28))
    )
    Button (action: 
        withAnimation 
            self.back.toggle()
        
        // Is there a way to "deselect" any textfields here
    )
        Text("Back")
    

为什么我点击一个,有一个蓝色边框不随动画淡出,怎么去掉?这个问题很具体,我提供了代码和必要的细节,我不明白为什么它应该太难回答。

所以概括地说,我需要知道:

如何去掉这个蓝色的选择边框

或者

如何立即取消选择按钮操作中的文本字段, 如果我应用填充或圆角,让边框与 TextField 正确对齐。

这张图片中唯一的蓝色是我指的边框

如此截图所示,文本字段是圆形的,但选择边框没有得到圆角以反映条目的圆角矩形形状

蓝色边框不适合填充

我添加了这样的填充 .padding([.leading, .trailing], 6)

【问题讨论】:

能否提供截图 哪个蓝色在文本字段上选择时没有蓝色边框,因为它具有PlainTextFieldStyle 样式 @Salman500 添加了截图。显示边框 @Salman500 在 macos 上使用 PlainTextFieldSyle 时出现蓝色边框 【参考方案1】:

您可以通过像这样扩展 NSTextField 来移除蓝色边框(即使在使用 PlainTextFieldStyle 时也会出现在 macos 上):

extension NSTextField 
        open override var focusRingType: NSFocusRingType 
                get  .none 
                set  
        

查看 Apple 开发者论坛的回答 here

【讨论】:

【参考方案2】:

我不知道你指的是哪个蓝色边框,如果你指的是textfield的蓝色边框,没有蓝色边框是因为你给了PlainTextFieldStyle

取消选择文本字段

UIApplication.shared.windows.filter($0.isKeyWindow).first?.endEditing(true)

有一个带有填充的圆形textfield

ZStack 
    Rectangle()
    .foregroundColor(.clear)
    .overlay(RoundedRectangle(cornerRadius: 6).stroke(Color("appcolor").opacity(0.5), lineWidth: 1))

    TextField("Enter some text", text: $worldName)
        .padding([.leading, .trailing], 6)
.frame(height: 42)
    .padding([.leading, .trailing], 10)

【讨论】:

感谢您的帮助,我很感激,但是我认为任何混淆都是由于我正在为 macos 编码。当您单击文本字段时,它会变为“已选中”,并且会在其周围出现蓝色边框。 不过,ios 的代码或许也适用于 macOS,所以我仍会调查您的答案 你找到解决办法了吗? @ZeeshanSuleman 我找到了在 macOS 上移除蓝色边框的解决方案,请参阅我对问题的回答

以上是关于如何摆脱 SwiftUI TextFields 周围的蓝色选择边框?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI Core Data 在 DetailView 中绑定 TextFields

如何根据布尔值 (SwiftUI) 更改对象的绑定源?

如何摆脱 SwiftUI 中的垂直文本填充?

如何摆脱不需要的 SwiftUI 动画?

SwiftUI如何摆脱NavigationView中通过NavigationLink链接的视图的不断初始化?

使用 SwiftUI 中活动 TextField 中的值更新非活动 TextField