UIMenuController Пользовательские элементы - PullRequest
14 голосов
/ 21 августа 2010

Я создал 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 Ответ

16 голосов
/ 21 августа 2010

Я думаю, что это один из немногих случаев, когда вы хотите создать подкласс 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

Codeдля моего 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
...