MacOS应用中PlainButtonStyle按钮在窗口非激活时无法触发点击问题
macOS SwiftUI按钮非激活状态点击问题解决
在macOS SwiftUI中,给按钮添加.buttonStyle(PlainButtonStyle())后,会出现窗口非激活时点击按钮仅激活窗口、需二次点击才触发事件的问题。这是因为PlainButtonStyle默认在窗口非激活状态下不会响应点击事件,必须等窗口激活后才能触发按钮动作,而默认按钮样式会将窗口激活和点击事件合并为一次操作。
解决方案:自定义Plain按钮样式
以下是一个自定义的按钮样式,既保留PlainButtonStyle的视觉效果,又能让按钮在窗口非激活时点击即触发事件并激活窗口:
struct FixedPlainButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label // 模拟Plain按钮的按压透明度变化 .opacity(configuration.isPressed ? 0.5 : 1.0) .onTapGesture { // 手动激活当前窗口 NSApp.keyWindow?.makeKeyAndOrderFront(nil) // 触发按钮原始动作 configuration.trigger() } } }
使用方式
将原按钮的.buttonStyle(PlainButtonStyle())替换为自定义样式即可:
Button { print("tapped!") } label: { Image(systemName: "doc.on.doc") .resizable() .frame(width: 14, height: 14) .padding(5) } .buttonStyle(FixedPlainButtonStyle())
这个自定义样式完美复刻了PlainButtonStyle的简洁外观,同时修复了非激活窗口下的点击行为,一次点击即可同时激活窗口并触发按钮动作,和默认按钮的表现一致。
内容的提问来源于stack exchange,提问作者Guig
相关产品推荐
相关产品推荐

