Sagar,
Ihre Frage ist ein paar Monate alt, aber ich endlich diese ein herausgefunden, so dass ich dachte ich sie beantworten würde, falls es jemand anderes hilft heraus.
Ich habe den folgenden Code der viewDidAppear hinzugefügt: Methode des View-Controllers, der die Webansicht enthält.
- (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]];
}
In meinem viewDidDisappear :, ich voran gehen und entfernen diese Elemente:
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[[UIMenuController sharedMenuController] setMenuItems:nil];
}
Dann habe ich die canPerformAction umgesetzt: withSender: Methode im View-Controller. Es hilft, das Konzept von Respondern und Responderketten zu verstehen, um zu verstehen, was hier vor sich geht. Im Grunde ist Ihr uiviewcontroller Teil der Responder-Kette. Daher wird er gefragt, ob er mit Aktionen (wie den von Ihnen oben hinzugefügten benutzerdefinierten Aktionen) umgehen kann, ob Objekte in der Responder-Kette (wie das UIWebView) nicht wissen, siehe die UIResponder documentation und die Event Handling Guide for iOS für die blutigen Details).
Wenn nun canPerformAction: withSender: für die Webansicht aufgerufen wird, wird der sender-Parameter auf nil festgelegt. Also versuche ich ein wenig clever zu sein, wie ich diese Funktion schreibe. Im Grunde stelle ich sicher, dass der Absender null ist, ich zeige dem Benutzer das Webview, und alle anderen Steuerelemente auf der Seite sind nicht der erste Responder. Wenn das der Fall ist, überprüfe ich, ob dies eine der oben definierten Aktionen ist, und gebe JA zurück, wenn dies der Fall ist. In allen anderen Fällen gebe ich den Standardwert von UIViewController zurück, indem ich dieselbe Methode für super aufruft.
- (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];
}
Natürlich, jetzt der nächste Schritt besteht darin, herauszufinden, wie man tatsächlich mit der Auswahl etwas zu tun (wahrscheinlich durch einige JavaScript in der Webansicht ausgeführt wird).
Sie verleihen mir noch eine Prämie, wenn Sie wollen :-) – Jacques
ich den Scheck für Absender entfernt == null, weil zukünftige Versionen von iOS könnte Absender auf etwas anderes gesetzt als null – Jacques
Ich möchte einladen Sie, diese Frage zu beantworten http://stackoverflow.com/questions/31183894/uimenucontroller-method-settargetrectinview-not-working-in-uitableview –