Catalyst 应用程序上的蓝色突出显示/聚焦环
Blue Highlighting / Focus Ring on Catalyst App
我目前正在使用 Project Catalyst 将我的 iOS 应用程序移植到 macOS。
我所有的文本字段、文本视图和 table 视图在活动时都有蓝色轮廓。
我在最近的 Apple Catalyst 应用程序(例如新闻)中注意到了它,所以我希望这只是一个错误。
有没有人找到其他方法将其删除?
有一个私有方法 _setFocusRingType:
似乎与 NSView API 匹配。我能够用它来消除聚焦环,尽管这可能无法通过应用程序审查。
使用它需要您自担风险:
SEL selector = NSSelectorFromString(@"_setFocusRingType:");
NSMethodSignature *signature = [self.textView methodSignatureForSelector:selector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setSelector:selector];
NSUInteger arg = 1; // NSFocusRingTypeNone
[invocation setArgument:&arg atIndex:2];
[invocation invokeWithTarget:self.textView];
希望我们能从 Apple 那里得到真正的解决方案。
在swift你可以做到
extension UITextView {
#if targetEnvironment(macCatalyst)
@objc(_focusRingType)
var focusRingType: UInt {
return 1 //NSFocusRingTypeNone
}
#endif
}
对 Amerino 的回答略有改进,以提高灵活性并在故事板中使用:
@IBDesignable
class UITextViewCS: UITextView {
@IBInspectable
public var focusRing: UInt = 1 // 0-default, 1-None, 2-Exterior
#if targetEnvironment(macCatalyst)
@objc(_focusRingType)
var focusRingType: UInt {
guard [0, 1, 2].contains(focusRing) else { return 0 }
return focusRing
}
#endif
}
它有助于在 Catalyst
中禁用所有 "view" 类 中的聚焦环
extension UIView {
#if targetEnvironment(macCatalyst)
@objc(_focusRingType)
var focusRingType: UInt {
return 1 //NSFocusRingTypeNone
}
#endif
}
如果满足您的需要,也可以在 Interface Builder 中针对特定按钮不使用任何代码来完成此操作。
在身份检查器中,只需将用户定义的 运行-time 属性设置为 1,如下所示:
请不要这样做 - 这是可访问性的焦点指示器,对仅使用键盘的用户很重要。
我目前正在使用 Project Catalyst 将我的 iOS 应用程序移植到 macOS。
我所有的文本字段、文本视图和 table 视图在活动时都有蓝色轮廓。
我在最近的 Apple Catalyst 应用程序(例如新闻)中注意到了它,所以我希望这只是一个错误。
有没有人找到其他方法将其删除?
有一个私有方法 _setFocusRingType:
似乎与 NSView API 匹配。我能够用它来消除聚焦环,尽管这可能无法通过应用程序审查。
使用它需要您自担风险:
SEL selector = NSSelectorFromString(@"_setFocusRingType:");
NSMethodSignature *signature = [self.textView methodSignatureForSelector:selector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setSelector:selector];
NSUInteger arg = 1; // NSFocusRingTypeNone
[invocation setArgument:&arg atIndex:2];
[invocation invokeWithTarget:self.textView];
希望我们能从 Apple 那里得到真正的解决方案。
在swift你可以做到
extension UITextView {
#if targetEnvironment(macCatalyst)
@objc(_focusRingType)
var focusRingType: UInt {
return 1 //NSFocusRingTypeNone
}
#endif
}
对 Amerino 的回答略有改进,以提高灵活性并在故事板中使用:
@IBDesignable
class UITextViewCS: UITextView {
@IBInspectable
public var focusRing: UInt = 1 // 0-default, 1-None, 2-Exterior
#if targetEnvironment(macCatalyst)
@objc(_focusRingType)
var focusRingType: UInt {
guard [0, 1, 2].contains(focusRing) else { return 0 }
return focusRing
}
#endif
}
它有助于在 Catalyst
中禁用所有 "view" 类 中的聚焦环extension UIView {
#if targetEnvironment(macCatalyst)
@objc(_focusRingType)
var focusRingType: UInt {
return 1 //NSFocusRingTypeNone
}
#endif
}
如果满足您的需要,也可以在 Interface Builder 中针对特定按钮不使用任何代码来完成此操作。
在身份检查器中,只需将用户定义的 运行-time 属性设置为 1,如下所示:
请不要这样做 - 这是可访问性的焦点指示器,对仅使用键盘的用户很重要。