所以我有一个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];
}
项目是NSMutableArray
,我在其中存储每个子视图指向的文件的名称,所以基本上subview[0] === item[0]
等...
subview[0]
是图片视图,item[0]
是该图片的fileName
我的问题是,我现在如何“广告”警告原始来电者选择了xyz文件?与NSLog
行相反?
提前致谢
答案 0 :(得分:0)
“原始来电者”是什么意思? -touchesEnded:withEvent:
由框架事件处理子系统调用。
你可能会做什么(但不要!见下文)是添加一些你自己的委托方法给现有的委托(显然已经有UIScrollViewDelegate
协议和相应的-[UIScrollView delegate]
属性)并调用您定义的代理方法代替您的NSLog()
。我在recent answer中讨论了这样做的答案。
然而,这一切都没有实际意义,因为你真正接近这个并为自己创造了许多不必要的工作。我将在前言中说,有些类子类应该是一个触发器,你需要重新考虑你的设计。而UIScrollView
就是这样一个类。
您已经承认自己拥有UIImageView
个对象的集合。您应该让他们处理互动。一般的想法是:
1)向每个实例发送类似[imageView setUserInteractionEnabled:YES];
的内容。在处理交互式图像视图时,这是最常被忽视的错误。
2)为每个图像视图添加适当的具体UIGestureRecognizer
实例,并实现手势识别器回调。除非您绝对必须支持古老的iOS版本,否则 总是 尝试使用手势识别器代替显式触摸处理。
3)在手势识别器回调中,添加基于发送手势识别器-view
采取适当操作的逻辑代码。 (例如,您可以检查相应的视图-image
或-frame
并使用该信息来决定触摸了哪个图像。)
由于手势识别器回调可能会在您的视图控制器中,因此可以更轻松地“与”代码的其余部分进行“对话”。