首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将自定义UIMenuItem添加到UITextView中的UIMenuController?

如何将自定义UIMenuItem添加到UITextView中的UIMenuController?
EN

Stack Overflow用户
提问于 2010-07-17 01:12:11
回答 2查看 13.4K关注 0票数 17

我正在尝试在UITextView中的“复制”、“粘贴”项旁边添加菜单项。我已经创建了UITextView的一个子类,并复制了苹果文档中的示例:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-20 11:15:52

所以我最终使用了以下代码来得到我想要的结果,我把下面的代码块放在我的视图控制器的viewDidLoad方法中,就像Alex所暗示的那样:

代码语言:javascript
复制
- (void)viewDidLoad {
    [super viewDidLoad];

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

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

代码语言:javascript
复制
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if (action == @selector(changeColor:)) {
        if (textView.selectedRange.length > 0) {
            return YES;
        }
    }
    return NO;
}

我选择将canPerformAction:方法放在视图控制器中,而不是放在自定义的UITextView类中,因为这样其他选项(如复制、剪切、粘贴等)。由于该方法在响应器链上的每个对象上都会被调用,因此它们的行为与正常情况一样。

票数 39
EN

Stack Overflow用户

发布于 2010-07-19 16:19:16

通过执行以下操作,我只能创建一个自定义菜单项,该菜单项始终显示在弹出菜单中:

代码语言:javascript
复制
- (void) setUpCustomMenu {
Class cls1 = NSClassFromString(@"UIMenuController");
Class cls2 = NSClassFromString(@"UIMenuItem");
if (cls1 && cls2)
    if ([UIMenuController instancesRespondToSelector:@selector(setMenuItems:)]) {
            UIMenuItem* item1 = [[UIMenuItem alloc] initWithTitle:@"My Menu Item" action:@selector(myMenuAction:)];
            [UIMenuController sharedMenuController].menuItems = [NSArray arrayWithObjects:item1, nil];;
            [item1 release];
    }
}

这在视图控制器的viewDidLoad中调用。

我仍然在努力让它只有条件地显示我的菜单项(例如,如果有选择的话),通过拦截调用菜单控制器的事件。到目前为止我还不能做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3267296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档