ich nicht in der Lage außer Kraft gesetzt war es sogar zum Laufen zu bringen, wenn ich alle Ihre Antworten lesen. Ich präsentiere Code, der für alle funktioniert.
Nehmen wir an, wir haben eine Controller-Klasse namens Controller. Sie können einfach den folgenden Code zu diesem Controller fügen das Menü auf seiner Ansicht zu arbeiten haben:
- (void)loadView {
[super loadView];
UILongPressGestureRecognizer *gr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
[self.view addGestureRecognizer:gr];
}
- (void) longPress:(UILongPressGestureRecognizer *) gestureRecognizer {
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
CGPoint location = [gestureRecognizer locationInView:[gestureRecognizer view]];
UIMenuController *menuController = [UIMenuController sharedMenuController];
UIMenuItem *resetMenuItem = [[UIMenuItem alloc] initWithTitle:@"Item" action:@selector(menuItemClicked:)];
NSAssert([self becomeFirstResponder], @"Sorry, UIMenuController will not work with %@ since it cannot become first responder", self);
[menuController setMenuItems:[NSArray arrayWithObject:resetMenuItem]];
[menuController setTargetRect:CGRectMake(location.x, location.y, 0.0f, 0.0f) inView:[gestureRecognizer view]];
[menuController setMenuVisible:YES animated:YES];
}
}
- (void) copy:(id) sender {
// called when copy clicked in menu
}
- (void) menuItemClicked:(id) sender {
// called when Item clicked in menu
}
- (BOOL) canPerformAction:(SEL)selector withSender:(id) sender {
if (selector == @selector(menuItemClicked:) || selector == @selector(copy:)) {
return YES;
}
return NO;
}
- (BOOL) canBecomeFirstResponder {
return YES;
}
Was, um das Menü zu arbeiten, dass der firstResponder (in unserem Fall unserer Controller ist getan werden muss - siehe Zeile mit [self becomeFirstResponder]) Ersthelfer (Override-Methode canBecomeFirstResponder Ursache Standardimplementierung gibt NO) als - (BOOL) canPerformAction:(SEL)selector withSender:(id) sender
als auch werden können, hat, die ja auf eine Aktion zurückkehren soll, die noch von firstResponder
der Kommentar hat die Zeichen Grenze - also poste ich den Code hier. –
hat gerade eine Problemumgehung gefunden: Setzen Sie ein unsichtbares UITextField in die Ansicht und machen Sie es zum Ersthelfer. Dann wird das Kopieren-Einfügen-Menü korrekt angezeigt. –
Ich habe das gleiche Problem (meine benutzerdefinierte Ansicht ist eine Unterklasse von UITableViewCell; aber ansonsten ist es die gleiche Situation). Ein unsichtbares UITextField hilft mir nicht. Das Menü wird immer noch nicht angezeigt, und der menuFrame ist immer noch nur Nullen. Außerdem erscheint die Tastatur immer dann, wenn ich das UITextField zu einem FirstResponder mache. Können Sie einen Beispielcode für Ihre Problemumgehung posten? –