[英]How to set a default/preferred window size for a Mac Catalyst app?
[英]How to disable default keyboard navigation in Mac Catalyst app?
我注意到我可以通过按 Mac 键盘上的向上和向下箭头键在 Mac Catalyst 应用程序中单步执行UITableView
中的行。 但是,这会干扰我的一个视图控制器中的现有功能。 有没有办法禁用它?
我在UITableView文档中找不到对此功能的任何引用。 Mac Catalyst 的人机界面指南提到“自动支持基本的 Mac 功能,例如...键盘导航”,所以我想这是一个有意的功能,但我找不到任何进一步的参考或文档。
我没有在我的应用程序中看到任何其他“自动”键盘导航的示例,但理想情况下,Apple 会发布一个完整的列表,以便我们知道如何使用,或者如果需要,禁用内置功能。
Catalyst 自动将向上/向下箭头的 UIKeyCommands 分配给UITableView
实例。 这不会发生在 iOS 上。 您可以通过在UITableViewController
的viewDidLoad()
中设置断点并检查tableView.keyCommands
来看到这一点。
所以我创建了一个非常简单的UITableView
子类,并通过返回 nil 来禁用默认的keyCommmands
:
class KeyCommandDisabledTableView: UITableView {
override var keyCommands: [UIKeyCommand]? {
return nil
}
}
然后我更新了我的UITableViewController
子类以使用新的KeyCommandDisabledTableView
子类:
class MyTableViewController: UITableViewController {
override func loadView() {
self.view = KeyCommandDisabledTableView(
frame: .zero,
style: .plain // or .grouped
)
}
}
等等瞧。 默认箭头键处理已消失,现在正在调用我的应用程序的自定义箭头键处理。
我进一步注意到,默认箭头键导航仅在单击表格中的一行后才开始,所以我猜该表格必须承担第一响应者角色。 我将此添加到我的表的代表 class 中:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
#if TARGET_OS_MACCATALYST
[tableView performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1];
#endif
}
修复了它,现在默认键盘导航一打开就会关闭。 并且不会干扰我的应用程序的自定义键盘导航。
(它没有延迟工作。)
由于 UITableView 和 UICollectionView 的selectionFollowsFocus属性,iOS 14 / macOS 11 使禁用此行为变得更加容易:
tableView.selectionFollowsFocus = false
这是我从 Apple DTS 收到的另一个解决方案。 只需将其添加到表视图委托:
func tableView(_ tableView: UITableView, canFocusRowAt indexPath: IndexPath) -> Bool {
return false
}
这适用于 macOS 11.6 和 12.0。 我没有要测试的 10.15 Mac,所以我也会保留我之前的resignFirstResponder
解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.