UIWebView で、特定のクラス div 要素にカスタム コンテキスト メニュー エントリを 1 つだけ表示させたいと考えています。そのため、次のように UIWebView デリゲートに canPerformAction:: メソッドを実装しました。
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
if (self.webView.superview != nil) {
BOOL isMyClass=[[self.webView stringByEvaluatingJavaScriptFromString:@"window.getSelection().getRangeAt(0).startContainer.parentNode.className;"] isEqualToString:@"myClass"];
if (isMyClass) {
if (action == @selector(myAction:)) {
return YES;
} else {
return NO; // should disable any other menu items
}
}
}
return [super canPerformAction:action withSender:sender];
}
結果は非常に奇妙です: ユーザーがそのような myclass div を選択すると、ほとんどの menuItems は表示されません (cut: copy: past:...) が、select: と selectAll: は引き続き表示されます (myAction とともに)。デバッガーの下で、これら 2 つの select/selectAll メソッドがデリゲートで canPerformAction:: を起動しないことに気付きました...これら 2 つのメソッドはどこで起動されますか?