2010-08-21 111 views
14

我创建了一个UIMenuController并且已经设置了一个自定义菜单项,像这样:UIMenuController自定义项目

UIMenuController *menuController = [UIMenuController sharedMenuController]; 
UIMenuItem *item1 = [[UIMenuItem alloc] initWithTitle:@"Do This" action:@selector(item1)]; 
[menuController setMenuItems:[NSArray arrayWithObject:item1]]; 

但我想这个对象是出现,所以我加入这个代码只有一个:

- (BOOL)canPerformAction: (SEL)action withSender: (id)sender { 
    BOOL answer = NO; 

    if (action == @selector(item1)) 
     answer = YES; 

    return answer; 
} 

问题是它仍然显示其他##标题##项目,如“选择”,“全选”和“粘贴”。 这可能与UITextView中显示的内容有关。 但是,如果显示所有其他项目,我该如何停止?

回答

16

我认为这是您想要子类UITextView的少数情况之一。我只是用下面的代码试了一下,唯一显示的菜单项是我的做点东西 item。

从我TestViewController.m

@implementation TestViewController 

- (void) doSomething: (id) sender 
{ 
    NSLog(@"Doing something"); 
} 

- (void) viewDidLoad 
{ 
    UIMenuController *menuController = [UIMenuController sharedMenuController]; 
    UIMenuItem *item = [[[UIMenuItem alloc] initWithTitle: @"Do Something" 
     action: @selector(doSomething:)] autorelease]; 
    [menuController setMenuItems: [NSArray arrayWithObject: item]]; 
} 

@end 

代码为我MyTextView.h

// MyTextView.h 

#import <UIKit/UIKit.h> 

@interface MyTextView :UITextView { 

} 

@end 

代码MyTextView.m

// MyTextView.m 

#import "MyTextView.h" 

@implementation MyTextView 

- (BOOL) canPerformAction:(SEL)action withSender:(id)sender 
{ 
    return NO; 
} 

@end 
+0

真棒,非常感谢! – Joshua 2010-08-21 18:22:59

+0

@Joshua,你用这段代码解决了你的问题吗?你可以跟我分享一下,因为我试过这个答案,但问题仍然没有解决 @ St3fan,你有什么建议吗? – 2011-05-19 08:47:05

+0

它没有工作。仍然复制,粘贴 – BDGapps 2012-08-07 21:50:50