4

いくつかのスクロールビューに画像ボタンを動的に追加しています。それらはすべて 1 つの longPressHandler を指しています。では、どのボタンが押されたかを取得するにはどうすればよいでしょうか。[送信者タグ] は、ボタンに追加した longGestureRecognizer のタグを提供し、そのタグを手動で設定することはできません。

for (...) {
    UIButton *button = [[UIButton alloc] init];
    button.tag = w + h * 3; 
    [button addTarget:self action:@selector(imageButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    UILongPressGestureRecognizer *gest = [[UILongPressGestureRecognizer alloc]
                initWithTarget:self action:@selector(imageButtonLongPress:)];
    gest.minimumPressDuration = 1;
    gest.delegate = self;

    [button addGestureRecognizer:gest];
    [gest release];

    [scrollView addSubview:button];
    [button release];
}

- (void) imageButtonLongPress:(id)sender {  
    // how to get button tag here?
}
4

2 に答える 2

14

には、レコグナイザーがアタッチされているビューを返すviewプロパティがあります。UIGestureRecognizerそれが最善の策だと思います。

- (void) imageButtonLongPress:(id)sender {  
    UIGestureRecognizer *recognizer = (UIGestureRecognizer*) sender;
    int tag = recognizer.view.tag;
}
于 2011-04-18T09:48:03.190 に答える
2

アクションでは、送信者をジェスチャでキャストしてから、そのビューをボタンにキャストしてから、ボタンのタグを次のように取得する必要があります-

UILongPressGestureRecognizer *gest = (UILongPressGestureRecognizer *)sender;
UIButton *button = (UIButton*)[gest view];
NSLog(@"%d",[button tag]);
于 2011-04-18T09:53:54.163 に答える