0

所以我有一个UIScrollView 多重UIImageViews 我必须生成我自己的滚动视图类才能利用它touchesEnded

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//    [super touchesEnded:touches withEvent:event];

    UITouch  *touch = [touches anyObject];
    CGPoint   point = [touch locationInView:self];

    if ((int)(point.x / 100) < [[self items] count] ) {
        NSLog(@" ENDED  D    File Selected is   %@     %d   " , [[self items]  objectAtIndex:(int)(point.x / 100) ]   ,  (int)(point.x / 100)   );
    }
//    [[self nextResponder] touchesEnded:touches withEvent:event];
}

items 是NSMutableArray 我在其中存储每个子视图指向的文件的名称,所以基本上 subview[0] === item[0] 等等......

subview[0]是图像视图并且item[0]是该fileName图像的

我的问题是我现在如何“做广告”提醒原始呼叫者选择了文件 xyz ?相对于NSLog行?

提前致谢

4

1 回答 1

0

“原始呼叫者”是什么意思? -touchesEnded:withEvent:由框架事件处理子系统调用。

您可能会做的(但不要!见下文)是将您自己的一些委托方法添加到现有委托(显然已经有一个UIScrollViewDelegate协议和相应的-[UIScrollView delegate]属性)并调用您定义的委托方法来代替你的NSLog(). 我在最近的回答中讨论了这样做的禁忌。

但是,这一切都没有实际意义,因为您实际上是在倒退并为自己创造了许多不必要的工作。我将首先说某些类的子类化应该是您需要重新考虑您的设计的触发器。并且UIScrollView是这样的一类。

你已经承认你有一个UIImageView对象的集合。你应该让他们处理交互。一般的想法是:

1)向每个实例发送类似[imageView setUserInteractionEnabled:YES];. 这是使用交互式图像视图时最常被忽视的一个错误。

2) 为每个图像视图添加适当的具体UIGestureRecognizer实例并实现手势识别器回调。除非您绝对必须支持古老的 iOS 版本,否则您应该始终尝试使用手势识别器来代替显式触摸处理。

3) 在手势识别器回调中,添加您的逻辑代码,该代码根据发送手势识别器的-view. (例如,您可以检查相应的视图-image-frame并使用该信息来确定触摸了哪个图像。)

由于手势识别器回调可能在您的视图控制器中,因此与您的其余代码“交谈”会容易得多。

于 2012-06-19T20:50:49.923 回答