、最初の選択に応答していない:UIMenuControllerが、私はそれで長押しジェスチャー認識との見解を持っている唯一の二
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressDetected:)];
[self addGestureRecognizer:longPress];
[longPress release];
}
return self;
}
長押しが検出されると、私はビューの上UIMenuViewControllerを表示したいです単一それで行動し、そのメニュー項目をタップしたとき、私はブロックを実行します:
- (void)longPressDetected:(UILongPressGestureRecognizer *)recognizer {
if (recognizer.state == UIGestureRecognizerStateBegan) {
[self becomeFirstResponder];
UIMenuController *menuController = [UIMenuController sharedMenuController];
UIMenuItem *actionItem = [[UIMenuItem alloc] initWithTitle:@"Action" action:@selector(someActionSelector)];
[menuController setMenuItems:[NSArray arrayWithObject:actionItem]];
[actionItem release];
[menuController setTargetRect:self.frame inView:self.superview];
[menuController setMenuVisible:YES animated:YES];
}
}
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
if (action == @selector(copy:) || action == @selector(cut:) || action == @selector(delete:) ||
action == @selector(paste:) || action == @selector(select:) || action == @selector(selectAll:)) {
return NO;
}
else if (action == @selector(someActionSelector)) {
return YES;
}
else {
return [super canPerformAction:action withSender:sender];
}
}
- (void)someActionSelector {
if (self.actionBlock) {
self.actionBlock();
}
}
問題は、第二長押しタップコンボ後にこの唯一の作品です。私が最初にビューを長押しするとメニューが表示されますが、メニューをタップすると何も起こりません。もう一度メニューが表示されたら、タップしてブロックを実行します。
デバッガは、someActionSelector
のブレークポイントが2番目のタップでのみ到達することを示しています。これがなぜなのか?
'UIGestureRecognizerStateBegan'を' UIGestureRecognizerStateRecognized'に変更しようとしましたか? – Costique