Сагар,
Твоему вопросу пару месяцев, но я наконец понял этот вопрос, поэтому я решил ответить на него, если он поможет кому-то еще.
Я добавил следующий код в viewDidAppear: метод контроллера представления, который содержит веб-представление.
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
UIMenuItem *customMenuItem1 = [[[UIMenuItem alloc] initWithTitle:@"Custom 1" action:@selector(customAction1:)] autorelease];
UIMenuItem *customMenuItem2 = [[[UIMenuItem alloc] initWithTitle:@"Custom 2" action:@selector(customAction2:)] autorelease];
[[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects:customMenuItem1, customMenuItem2, nil]];
}
С моей точки зренияDidDisappear: я иду и удаляю эти элементы:
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[[UIMenuController sharedMenuController] setMenuItems:nil];
}
Затем я реализовал метод canPerformAction: withSender: в контроллере представления. Это помогает понять концепцию респондентов и цепочек респондентов, чтобы понять, что здесь происходит. По сути, ваш контроллер uiview является частью цепочки респондента, поэтому его спрашивают, может ли он обрабатывать какие-либо действия (например, ваши пользовательские действия, которые вы добавили выше), которые объекты выше в цепочке респондента (например, UIWebView) не знают, как их обрабатывать см. документацию UIResponder и Руководство по обработке событий для iOS для получения подробной информации).
Теперь, когда canPerformAction: withSender: вызывается для веб-просмотра, для параметра отправителя устанавливается значение nil. Итак, я пытаюсь быть немного умным в том, как я пишу эту функцию. По сути, я удостоверяюсь, что отправитель равен нулю, я показываю веб-просмотр пользователю, и любые другие элементы управления на странице не являются первым респондентом. Если это так, то я проверяю, является ли это одним из действий, которые я определил выше, и возвращаюсь ДА, если это так. Во всех других случаях я возвращаю значение по умолчанию из UIViewController, вызывая тот же метод для super.
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
if (webView.superview != nil && ![urlTextField isFirstResponder]) {
if (action == @selector(customAction1:) || action == @selector(customAction2:)) {
return YES;
}
}
return [super canPerformAction:action withSender:sender];
}
Конечно, теперь следующим шагом является выяснение того, как на самом деле сделать что-то с выделением (возможно, запустив некоторый JavaScript в веб-представлении).