Я хочу показать 2 варианта как "привет" и "до свидания" когда пользователь завершает выбор на UIWebView.
Я добавил наблюдателя к своему контроллеру представления следующим образом. Но я не знаю дальнейшую реализацию.
[[UIMenuController sharedMenuController] addObserver:self
forKeyPath:UIMenuControllerWillShowMenuNotification
options:nil
context:nil
];
Sagar,
Вашему вопросу уже несколько месяцев, но я, наконец, разобрался с этим, поэтому решил ответить на него, если он поможет кому-то еще.
Я добавил следующий код в метод 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]];
}
В моем viewDidDisappear: я удаляю эти элементы:
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[[UIMenuController sharedMenuController] setMenuItems:nil];
}
Затем я реализовал метод canPerformAction:withSender: в контроллере представления. Это помогает понять концепцию ответчиков и цепочек ответчиков, чтобы понять, что здесь происходит. По сути, ваш uiviewcontroller является частью цепочки респондентов, поэтому его спрашивают, может ли он обрабатывать какие-либо действия (например, ваши настраиваемые действия, которые вы добавили выше), которые объекты выше по цепочке респондентов (например, UIWebView) не знают, как обрабатывать ( см. документацию UIResponder и Руководство по обработке событий для iOS для подробностей).
Теперь, когда canPerformAction:withSender: вызывается для веб-просмотра, параметр sender устанавливается равным nil. Итак, я стараюсь быть немного умнее в том, как я пишу эту функцию. По сути, я удостоверяюсь, что отправитель равен нулю, я показываю веб-просмотр пользователю, и любые другие элементы управления на странице не являются первым ответчиком. Если это так, то я проверяю, является ли это одним из действий, которые я определил выше, и возвращаю YES, если это так. Во всех остальных случаях я возвращаю значение по умолчанию из 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 в веб-просмотре).