【问题标题】:touchesEnded with array of UIImageViewtouchesEnded 与 UIImageView 数组
【发布时间】:2012-02-28 10:20:28
【问题描述】:

我有一个带有 UIImageView 的数组。假设当前数组中有 5 个 UIImageView。我如何知道我当前触摸的是哪个 UIImageView?

谢谢。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [touches anyObject];

    if ([touch view] == ??)
    {

    }
}

【问题讨论】:

    标签: objective-c ios uiimageview touchesbegan


    【解决方案1】:

    最简单的解决方案之一是设置视图的tag 属性。

    @property(nonatomic) NSInteger tag
    

    这样你就可以轻松找回被触碰过的人:

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    {
        UITouch *touch = [touches anyObject];
        if ([[touch view] tag] == 1)
        {
            // ...
        }
    

    }

    您可以在 Interface Builder 中设置此属性,也可以直接在代码中设置。

    【讨论】:

    • 如果我想知道用户是否正在触摸任何 UIImageView 怎么样? if ([touch view] == myArray) 之类的东西?
    • @RockBaby - 不,这个测试不会告诉你有用的东西。我会测试类似:[myArray containsObject:[touch view]].
    【解决方案2】:

    正如其他海报所说,使用标签。不过,他的代码有点乱。我永远不会像他那样称呼财产。你应该这样做

    [touch view].tag
    

    通过这种方式,其他人将更容易阅读您的代码。此外,您可以像这样设置 UIImageViews 的标签:

    yourImageView.tag = 1
    

    yourImageView 是图像。

    【讨论】:

      【解决方案3】:

      为循环中的每个图像赋予标签值

      for(int i=0;i<5;i++)
      {
      view.tag=i
      }
      

      【讨论】:

      • 谢谢。这就是我现在正在做的事情。我在想有什么办法不循环
      • 您可以轻松使用 NSpredicate,无需循环
      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多