2012-10-15 60 views
1

我覺得下面的圖片可以說明問題很好...我也複製相應的代碼部分在這裏 https://www.dropbox.com/s/pd1syth3gce6qh7/ios_uimenucontroller.png的iOS共享UIMenuController可能緩存UIMenuItem


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] Tap
2012-10-15 14:02:16.455 TouchTracker [8808:c07] count:0
2012-10-15 14:02:16.455 TouchTracker [8808:c07] count:1
2012-10-15 14: 02:16.456 TouchTracker [8808:c07] ???
2012年10月15日14:02:16.459 TouchTracker [8808:C07]線路釋放


只有一個UIMenuItem加到UIMenuController,並在運行時間期間只有一個的菜單項的NSArray,但兩個菜單項出現在模擬器中。

如果我點擊刪除項目,它會發送刪除:消息給自己。事實上,標題之前是「刪除」,看起來好像是緩存了。

已嘗試在iPhone模擬器上重置內容和設置。還刪除了DerivedData文件夾的內容...沒有解決方案。也將盡快在設備上進行測試。

你有什麼想法嗎?

在這裏你可以找到完整的項目: https://www.dropbox.com/s/wg9ol63aa05px26/TouchTracker.zip

由於提前, 的Gabor歐羅斯

回答

0

「刪除」是一個始終可見的系統菜單項。您的自定義菜單項目添加到該項目。 從UIMenuController Class Reference

刪除菜單項已添加到系統菜單項集。 點擊它調用UIResponderStandardEditActions動作方法 delete :,也在iOS 3.2中添加。

+0

謝謝你的提示...其實解決辦法是改變這一點: - (空)刪除:(UIMenuItem *)發送到 : - (空)deleteLine:(UIMenuItem *)發件人 它看起來像系統使用的刪除名稱!哎喲! :) –