我是不是能夠得到,即使我讀了所有你的答案它的工作。我正在提供適用於所有人的現成代碼。
比方說,我們有一個名爲控制器控制器類。您可以將下面的代碼簡單地粘貼到該控制器具有菜單視圖工作:
- (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;
}
發生了什麼,以便完成對菜單的工作就是firstResponder(在我們的例子中我們的控制器 - 看線與[自becomeFirstResponder])具有能夠成爲第一響應(重寫方法canBecomeFirstResponder原因默認實現否)以及- (BOOL) canPerformAction:(SEL)selector withSender:(id) sender
應YES返回到可以由firstResponder
評論有字符數限制 - 所以我在這裏發佈代碼。 – 2009-07-18 07:19:10
剛發現一個解決方法: 在視圖中放入一個隱形的UITextField,並使其成爲第一響應者。然後複製粘貼菜單將正確彈出。 – 2009-07-18 08:28:20
我有這個相同的問題(我的自定義視圖是UITableViewCell的一個子類;但否則它是相同的情況)。一個無形的UITextField不幫助我。菜單仍然沒有顯示,menuFrame仍然是全零。此外,只要我將UITextField設置爲firstResponder,鍵盤就會彈出。你能爲你的解決方案發布一些示例代碼嗎? – 2009-07-18 16:08:18