67

カスタム UIMenuController を作成してビューに表示しようとしています。これが私のコードです:

UIMenuController *menuController = [UIMenuController sharedMenuController];
    UIMenuItem *listMenuItem = [[UIMenuItem alloc] initWithTitle:@"List" action:@selector(addList:)];

    [menuController setMenuItems:[NSArray arrayWithObject:listMenuItem]];
    [menuController setTargetRect:CGRectMake(50.0, 50.0, 0, 0) inView:self.view];
    [menuController setMenuVisible:YES animated:YES];

    [listMenuItem release];

エラーや例外はありませんが、メニュー コントローラーが表示されません。

4

7 に答える 7

177

次の 3 つのことを行う必要があります。

  1. -becomeFirstResponderビューまたはビュー コントローラーを呼び出す必要があります。
  2. ビューまたはビュー コントローラーを実装する必要があります-canBecomeFirstResponder( を返しYESます)。
  3. 必要に応じて、View または View Controller を実装-canPerformAction:action withSender:senderして、メニュー項目を個別に表示/非表示にすることができます。
于 2010-09-09T04:32:29.930 に答える
15

UIMenuControllerビューが最初の応答者であり、かつ

- (BOOL)canPerformActionメソッドが返すYES

したがって、ボタンのクリック時にメニュー コントローラーを表示する場合、ボタン アクションの最初の行は[self becomeFirstResponder]. 注: ここで self は、メニューを表示するビューです。

長押しジェスチャでメニューを表示する場合はUIView、書き込む前に longPressGesture を longpress イベントに追加します。

[menuController setTargetRect:CGRectMake(50.0, 50.0, 0, 0) inView:self.view];
[menuController setMenuVisible:YES animated:YES];

書きます[self becomeFirstResponder];

次に、OZ が述べた手順に従います。

于 2010-12-27T08:51:44.070 に答える
2

iOS6で特に(そしてランダムに)この問題が発生している場合に備えて、デバイスでSpeak Selectionを有効にすることに関連するこのSOを確認することをお勧めします([設定]->[一般]->[アクセシビリティ]->[Speak Selection:オン])。少数のユーザーがカスタムを見ることができずUIMenuItems、これが原因でした。

于 2012-12-24T23:03:07.203 に答える
-1

多分withと?CGRectMake(50.0, 50.0, 0, 0)を作成するためです。CGRectwidth = 0height = 0

乾杯、アンカ

于 2010-06-24T18:50:24.800 に答える