如何在UITextView中向UIMenuController添加自定义UIMenuItem?

Kyl*_*oza 17 iphone cocoa objective-c ipad

我正在尝试在UITextView中的"复制","粘贴"项旁边添加一个菜单项.我已经创建了一个UITextView的子类,并在这里复制了apple的docs中的示例:

http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/Text/Text.html#//apple_ref/doc/uid/TP40009370-CH8-SW28

我只是在IB中创建了一个UiTextView,并将其类设置为我的CustomTextView类.不幸的是,这不起作用.虽然,如果我将CustomTextView设置为UIView的子类,它可以很好地工作.这里有什么帮助?

我还在这里做了一个非常简单的示例项目:

apps.popsweet.com/TextViewTrial.zip

Kyl*_*oza 39

所以我最终使用了以下我想要的结果,我将以下块放在我的视图控制器的viewDidLoad方法中,因为Alex暗示:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"Change Color" action:@selector(changeColor:)];
    [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObject:menuItem]];
    [menuItem release]; 
}
Run Code Online (Sandbox Code Playgroud)

然后我将以下内容添加到视图控制器,以便在UITextView中选择文本时有条件地显示该项目,我将其命名为"textView":

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if (action == @selector(changeColor:)) {
        if (textView.selectedRange.length > 0) {
            return YES;
        }
    }
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

我选择在视图控制器中放置canPerformAction:withSender:方法而不是自定义UITextView类,因为这样其他选项(例如复制,剪切,粘贴等)的行为与通常的一样,因为在每个对象上调用该方法响应者链.