我如何使用 sender 参数来确定选择了什么 UIImageView?

How do I use the sender argument to figure out what UIImageView was selected?

我有八个 UIImageViews,如果与之关联的 UITapGestureRecognizer 被激活,我想淡化。我已将所有识别器连接到此 IBAction:

- (IBAction)disableDie:(id)sender {

    NSLog(@"%@", sender);
    NSLog(@"%ld",[(UIGestureRecognizer *)sender view].tag);

}

我想我可以用这样的循环来完成:

- (IBAction)disableDie:(id)sender {

    for (UIImageView *numberImage in self.diceOutletArray) {
        if (numberImage == sender) {
            numberImage.alpha = 0.65;
        }
    }

    NSLog(@"%@", sender);
    NSLog(@"%ld",[(UIGestureRecognizer *)sender view].tag);

}

但是按下的 UIImageView 没有任何反应,但是打印了消息。我在其他循环中使用了 diceOutletArray 并且它有效。

手势识别器是发送者,而不是视图。您应该在 sender 的打印输出中看到它。您需要获取识别器的视图(假设它直接附加到其图像视图)。

一旦你有了它,你真的不需要去寻找另一个指向视图的指针:你已经有了它。它只是被称为 sender.view 而不是 mumbleMumbleImageView.

只需将 setAlpha: 发送到该指针。

发件人是 UITapGestureRecognizer,不是 UIImageView,并且 因此 numberImage == sender 永远不会是真的。

试试这个:

- (IBAction)disableDie:(UIGestureRecognizer *)sender {
    for (UIImageView *numberImage in self.diceOutletArray) {
        if (numberImage == sender.view) {
            numberImage.alpha = 0.65;
            break;
        }
    }
}

虽然您实际上根本不需要循环,但它也可以正常工作:

- (IBAction)disableDie:(UIGestureRecognizer *)sender {
    sender.view.alpha = 0.65;
}