Вы можете просто переопределить -copy:
- (void)copy:(id)sender
{
// Do something else here
return [super copy:sender];
}
Изменить, чтобы ответить на ваш комментарий.
Определить немного сложнее, так как это личное. Однако вы можете реализовать свой собственный метод. Настройте UIMenuController с нужными вам элементами.
UIMenuItem *copyItem = [[UIMenuItem alloc] initWithTitle:@"Copy"
action:@selector(myCopy:)];
UIMenuItem *defineItem = [[UIMenuItem alloc] initWithTitle:@"Define"
action:@selector(myDefine:)];
[[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects:defineItem, copyItem, nil]];
[defineItem release];
[copyItem release];
Затем вы реализуете эти методы.
Что касается определения, то оно намного сложнее. Во-первых, вам нужно проверить, есть ли определение у UIReferenceLibraryController, переопределив -canPerformAction: withSender:
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(myDefine:)) {
// Make sure we are on iOS5.x
if (NSClassFromString(@"UIReferenceLibraryViewController")) {
return [UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:[webView selectedText]];
}
}
// Implement other custom actions here
return NO;
}
-selectedText - это категория в UIWebView:
- (NSString *)selectedText {
return [self stringByEvaluatingJavaScriptFromString:@"window.getSelection().toString()"];
}
Тогда вам нужно реализовать myDefine:
- (void)myDefine:(UIMenuController *)menuController
{
CGRect selectedWordFrame = [webView rectForSelectedText];
UIReferenceLibraryViewController *dict = [[UIReferenceLibraryViewController alloc] initWithTerm:[webView selectedText]];
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:dict];
[popover presentPopoverFromRect:selectedWordFrame
inView:webView
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
[popover setDelegate:self];
[dict release];
}
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
[popoverController release];
}
Изменить, чтобы ответить на ваш комментарий снова
-rectForSelectedText - это еще одна пользовательская категория в UIWebView.
- (CGRect)rectForSelectedText {
return CGRectFromString([self stringByEvaluatingJavaScriptFromString:@"getRectForSelectedWord()"]);
}
То, что он делает, вызывает javascript, который возвращает строку, которую вы можете конвертировать с помощью CGRectFromString (), это выглядит примерно так:
function getRectForSelectedWord() {
var selection = window.getSelection();
var range = selection.getRangeAt(0);
var rect = range.getBoundingClientRect();
return "{{" + rect.left + "," + rect.top + "}, {" + rect.width + "," + rect.height + "}}";
}
Проверьте эту страницу , чтобы узнать, как внедрить JavaScript в UIWebView.