如何将自定义菜单项添加到UITextView菜单,这是指向所选单词的维基百科页面的链接?

时间:2013-11-14 11:27:02

标签: iphone objective-c ios6 wikipedia uimenucontroller

我是Xcode的新手,我使用的是版本4.6.3 - Macbook对于新版本而言太旧了。

我环顾互联网和Stack Overflow,无法找到我想要的内容,或者我无法获得片段。

我想在UITextView中长按单词时出现的菜单项中添加一个菜单项。我希望它说“Wiki”,当按下它时,它将链接到所选单词的维基百科页面。它可能是通过Safari,还是我应该在带有webview的应用程序中执行此操作?

我找到了:

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

但这似乎没有做任何事情。

不幸的是我无法理解检索wikipedia页面的建议,我不是那么高级,对不起。我通常不知道在哪里放置代码片段。

UILabel我已经更好地显示了文本,矩形UITextView中的文本在顶部有一个间隙,因此文本不居中,偏移UITextview参数意味着文本锚定在顶部,而不是集中。将菜单附加到UILabel似乎非常困难。

1 个答案:

答案 0 :(得分:16)

MyViewController.h

@interface MyViewController : UIViewController

// Linked textField from interface builder
@property (weak, nonatomic) IBOutlet UITextField *textField;

@end

MyViewController.m

viewDidLoad方法中,将wiki按钮添加到UIMenuController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Add wiki button to UIMenuController
    UIMenuController *menuController = [UIMenuController sharedMenuController];
    UIMenuItem *wikiItem = [[UIMenuItem alloc] initWithTitle:@"Wiki" action:@selector(openWiki:)];
    [menuController setMenuItems:[NSArray arrayWithObject:wikiItem]];

}

创建openWiki方法:

- (void)openWiki:(id)sender {

    if(![[_textField selectedTextRange] isEmpty]) {

        // Url string
        NSString *urlStr = [NSString stringWithFormat:@"http://en.wikipedia.org/wiki/%@",[_textField textInRange:[_textField selectedTextRange]]];

        // Create url object
        NSURL *myURL = [[NSURL alloc] initWithString:urlStr];

        // Open url in safari
        [[UIApplication sharedApplication] openURL:myURL];

    }
}

就是这样。