1

次の画像で問題をうまく説明できると思います... https://www.dropbox.com/s/pd1syth3gce6qh7/ios_uimenucontroller.png

対応するコード部分もここにコピーします。

CGPoint point = [sender locationInView:self];
selectedLine = [self lineAtPoint:point];

if(selectedLine) {
    [self becomeFirstResponder];

    UIMenuController *menuController = [[UIMenuController sharedMenuController] retain];
    NSLog(@"count: %d", [[menuController menuItems] count]);
    UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"???" action:@selector(delete:)];
    [menuController setMenuItems:[NSArray arrayWithObjects: menuItem, nil]];
    NSLog(@"count: %d", [[menuController menuItems] count]);

    for (UIMenuItem *item in [menuController menuItems]) {
        NSLog(@"%@", [item title]);
    }

    [menuController setTargetRect:CGRectMake(point.x, point.y, 2, 2) inView:self];
    [menuController setMenuVisible:YES animated:YES];

    [menuController release];
    [menuItem release];
} else {
    [[UIMenuController sharedMenuController] setMenuVisible:NO animated:YES];
}

[linesInProcess removeAllObjects];
[self setNeedsDisplay];

コンソール出力:
2012-10-15 14:02:16.450 TouchTracker[8808:c07] タップ
2012-10-15 14:02:16.455 TouchTracker[8808:c07] カウント: 0
2012-10-15 14:02:16.455 TouchTracker [8808:c07] カウント: 1
2012-10-15 14:02:16.456 TouchTracker[8808:c07] ???
2012-10-15 14:02:16.459 TouchTracker[8808:c07] 行がリリースされました


UIMenuController に追加される UIMenuItem は 1 つだけで、実行時に menuItems NSArray に追加されるのは 1 つだけですが、シミュレーターには 2 つのメニュー項目が表示されます。

[アイテムの削除] をクリックすると、delete:メッセージが自分自身に送信されます。実は以前はタイトルが「削除」だったのですが、なんとなくキャッシュされているようです。

iPhoneシミュレーターでコンテンツと設定をリセットしようとしました。DerivedData フォルダーの内容も削除しました...まだ解決策はありません。また、すぐにデバイスでテストします。

何か考えはありますか?

ここで完全なプロジェクトを見つけることができます: https://www.dropbox.com/s/wg9ol63aa05px26/TouchTracker.zip

前もってありがとう、ガボール・オロス

4

1 に答える 1

0

「削除」は、常に表示されるシステムメニュー項目です。カスタムメニュー項目がそれに追加されます。UIMenuControllerクラスリファレンスから:

システムメニュー項目のセットに削除メニュー項目が追加されました。これをタップすると、UIResponderStandardEditActionsアクションメソッドdelete:が呼び出されます。これもiOS3.2で追加されています。

于 2012-10-15T15:49:22.937 に答える