2

UIWebView の編集メニューから [定義] メニュー項目を無効にする必要があります。canPerformAction:withSender:これは、無効にするアイテムに対して実装して NO を返すことによって行われるはずです。これらは私的なアイテムですが、保持したいアイテムにはYESを返し、それ以外のすべてにはNOを返すことができるはずです(この質問のように)。

ただし、これは機能していません。ドキュメントによると、

レスポンダ チェーンに YES を返すレスポンダがない場合、メニュー コマンドは無効になります。クラスがコマンドに対して NO を返した場合でも、レスポンダー チェーンのさらに上の別のレスポンダーが YES を返し、コマンドを有効にする可能性があることに注意してください。

これが機能しない理由である必要があるようです。どのレスポンダーが YES を返しているかを調べるにはどうすればよいですか?

4

1 に答える 1

2

最後に、サブビューを再帰的に通過し、それらがファーストレスポンダーであるかどうかをログに記録するこの関数でこれを理解しました。

- (void) logResponderInfo: (UIView *)view 
{
    NSLog(@"%@ %@", NSStringFromClass(view.class), view.isFirstResponder ? @"yes" : @"no");

    for (UIView *sub in view.subviews) {
        [self logResponderInfo:sub];
    }
}

canPerformAction:withSender:関数から呼び出したもの

[self logResponderInfo:self.webView];

これはログに書き出されました

2013-11-18 11:35:56.100 Testing[44593:a0b] CDVCordovaView no
2013-11-18 11:35:56.100 Testing[44593:a0b] _UIWebViewScrollView no
2013-11-18 11:35:56.101 Testing[44593:a0b] UIWebBrowserView yes
2013-11-18 11:35:56.101 Testing[44593:a0b] UITextSelectionView no
2013-11-18 11:35:56.102 Testing[44593:a0b] UIView no
2013-11-18 11:35:56.102 Testing[44593:a0b] UIImageView no
2013-11-18 11:35:56.103 Testing[44593:a0b] UIImageView no
2013-11-18 11:35:56.103 Testing[44593:a0b] UIActivityIndicatorView no
2013-11-18 11:35:56.104 Testing[44593:a0b] UIImageView no

最初の応答者は実際には UIWebBrowserView であることがわかりました。

于 2013-11-18T16:51:39.427 に答える