如何在Mac Catalyst应用程序中禁用默认键盘导航?

时间:2020-04-10 20:06:55

标签: ios macos uitableview keyboard-shortcuts mac-catalyst

我注意到,通过按Mac键盘上的向上和向下箭头键,可以在Mac Catalyst应用程序中的UITableView中逐行浏览。但是,这会干扰我的一个视图控制器中的现有功能。有办法禁用它吗?

UITableView文档中找不到对该功能的任何引用。 Mac Catalyst的Human Interface Guidelines提到“对Mac基本功能的自动支持,例如...键盘导航”,所以我想这是一个有意的功能,但是我找不到关于它的进一步参考或文档。它。

在我的应用程序中,我还没有看到“自动”键盘导航的其他示例,但理想情况下,Apple会发布完整列表,以便我们知道如何使用或禁用内置功能。

3 个答案:

答案 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