我注意到,通过按Mac键盘上的向上和向下箭头键,可以在Mac Catalyst应用程序中的UITableView
中逐行浏览。但是,这会干扰我的一个视图控制器中的现有功能。有办法禁用它吗?
在UITableView文档中找不到对该功能的任何引用。 Mac Catalyst的Human Interface Guidelines提到“对Mac基本功能的自动支持,例如...键盘导航”,所以我想这是一个有意的功能,但是我找不到关于它的进一步参考或文档。它。
在我的应用程序中,我还没有看到“自动”键盘导航的其他示例,但理想情况下,Apple会发布完整列表,以便我们知道如何使用或禁用内置功能。
答案 0 :(得分:2)
Catalyst自动为UITableView
实例的向上/向下箭头分配UIKeyCommands。在iOS上不会发生这种情况。您可以通过在viewDidLoad()
的{{1}}中设置一个断点并检查UITableViewController
来看到这一点。
因此,我创建了一个非常简单的tableView.keyCommands
子类,并通过返回nil禁用了默认的UITableView
:
keyCommmands
然后我将class KeyCommandDisabledTableView: UITableView {
override var keyCommands: [UIKeyCommand]? {
return nil
}
}
子类更新为使用新的UITableViewController
子类:
KeyCommandDisabledTableView
等等!默认的箭头键处理已消失,现在正在调用应用程序的自定义箭头键处理。
答案 1 :(得分:0)
我进一步注意到,默认箭头键导航仅在单击表中的一行后才开始,因此我猜想该表必须承担第一响应者角色。我将其添加到表的委托类中:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
#if TARGET_OS_MACCATALYST
[tableView performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1];
#endif
}
解决了!现在,默认键盘导航会在打开后立即关闭,并且不会干扰我的应用程序的自定义键盘导航。
(没有延迟,它是行不通的。)
答案 2 :(得分:0)
由于有了UITableView和UICollectionView的selectionFollowsFocus属性,iOS 14 / macOS 11使其更容易禁用此行为:
tableView.selectionFollowsFocus = false