14

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。しかし、他のすべてのアイテムを表示しないようにするにはどうすればよいですか?

4

1 に答える 1

16

これは、サブクラス化する数少ないケースの1つだと思いますUITextView。次のコードでこれを試しましたが、表示されるメニュー項目はDoSomething項目のみです。

私から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
于 2010-08-21T17:37:08.000 に答える