UIMenuController自定义项目

时间:2010-08-21 13:24:47

标签: iphone objective-c cocoa-touch uitextview 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中显示的内容有关。 但是,如果显示所有其他项目,我该如何停止?

1 个答案:

答案 0 :(得分:16)

我认为这是您想要继承UITextView的少数情况之一。我刚刚使用以下代码尝试了这个,并且显示的唯一菜单项是我的 Do Something 项目。

来自我的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