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

时间:2016-02-04 00:00:44

标签: ios objective-c uiimageview sender

如果激活与public class Singleton { private static var sharedInstanceVar = Singleton() public class func sharedInstance()->Singleton { return sharedInstanceVar } } public class SubSingleton: Singleton { private static var sharedInstanceToken:dispatch_once_t = 0 public class override func sharedInstance()->SubSingleton { dispatch_once(&sharedInstanceToken){ sharedInstanceVar = SubSingleton() } return sharedInstanceVar as! SubSingleton } } 相关联的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并且它可以工作。

2 个答案:

答案 0 :(得分:5)

发件人是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;
}

答案 1 :(得分:4)

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

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

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