Sagar,
Twoje pytanie jest kilka miesięcy, ale w końcu zorientowali ten jeden, więc pomyślałem, że go odebrać w przypadku, gdy pomaga się komuś innemu.
Dodałem następujący kod do metody viewDidAppear: metoda kontrolera widoku, który zawiera widok WWW.
- (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]];
}
W moim viewDidDisappear :, I śmiało i usunąć te elementy:
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[[UIMenuController sharedMenuController] setMenuItems:nil];
}
Potem wdrożył canPerformAction: withSender: metodę w kontroler widoku. Pomaga zrozumieć koncepcję respondentów i łańcuchów odpowiadających, aby zrozumieć, co się tutaj dzieje. Zasadniczo twój kontroler uiview jest częścią łańcucha responder, więc zostaje zapytany, czy może obsłużyć dowolne działania (takie jak twoje niestandardowe akcje dodane powyżej), że obiekty znajdujące się wyżej w łańcuchu respondenta (np. UIWebView) nie wiedzą, jak sobie z tym poradzić (patrz UIResponder documentation i Event Handling Guide for iOS, aby uzyskać szczegółowe informacje).
Teraz, gdy canPerformAction: withSender: jest wywoływana dla widoku WWW, parametr sender jest ustawiony na zero. Tak więc staram się być nieco sprytny, jeśli chodzi o pisanie tej funkcji. Zasadniczo upewniam się, że nadawca jest zerowy, wyświetlam przeglądarkę użytkownikowi, a wszelkie inne elementy sterujące na stronie nie są pierwszą odpowiedzią. Jeśli tak jest, to sprawdzam, czy jest to jedno z działań, które zdefiniowałem powyżej i ponownie zwracam TAK, jeśli tak jest. We wszystkich innych przypadkach zwracam domyślną wartość z UIViewController, wywołując tę samą metodę na 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];
}
Oczywiście, teraz następnym krokiem jest dowiedzieć się, jak faktycznie coś zrobić z wyboru (prawdopodobnie przez uruchomienie JavaScript w WebView).
Nadal można przyznać mi nagrodę, jeśli chcesz :-) – Jacques
usunąłem czek dla nadawcy == nil ponieważ przyszłe wersje iOS może ustawić nadawcę o czymś innym niż zero – Jacques
Chciałbym zaprosić możesz odpowiedzieć na to pytanie http://stackoverflow.com/questions/31183894/uimenucontroller-method-settargetrectinview-not-working-in-uitableview –