我有2个问题而且我完全混淆了。请帮帮我
1)我面临一个问题,我想将点击监听器分配给我的子视图中的图像视图,该子视图位于UITableView
的单元格中。
在我的tableview单元格中有两个图像视图,我想给它们点击监听器,并且还可以识别它们,例如哪个图像视图被点击在哪一行等等。
如果我写scrollview.userinteractionEnable=YES;
而不是didSelectRowAtIndexPath
没有回应。
我知道它是因为子视图。
但是,如果我更改scrollview.userinteractionEnable=NO;
而不是我的didselectrowatIndexpath
代码执行。但是scrollview不会滚动到水平..
我该怎么办?我想要水平滚动加Image-view单击ImageView上的Listener。
**通过创建scrollview子类**来解决点击问题
这是我的Customcell类
cellScrollViewClass *scrollView = [[cellScrollViewClass alloc] initWithFrame:CGRectMake(0.0,0.0,430,187)];
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 3,scrollView.frame.size.height);
scrollView.scrollEnabled=YES;
scrollView.userInteractionEnabled=YES;
for (int i = 0; i < 3; i++) {
CGRect frame;
frame.origin.x = scrollView.frame.size.width * i;
frame.origin.y = 0;
frame.size = scrollView.frame.size;
if(i==2) // to check Last item must be train Engine
{
UIView *EngineView = [[UIView alloc]initWithFrame:frame];
UIImageView *engineImageView = [[UIImageView alloc]initWithFrame:CGRectMake(-112.5, 6, 430, 180)];
UIImage *Image = [UIImage imageNamed:@"backengine.png"];
engineImageView.contentMode = UIViewContentModeScaleAspectFit;
engineImageView.image = Image;
[EngineView addSubview:engineImageView];
[scrollView addSubview:EngineView]; // add 3rd imageview that is Train Engine to end of scrollview
}
else{ // Not equal to 2 than it must be wagon of train.
UIView *wagon = [[UIView alloc]initWithFrame:frame];
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"wagon.png"]];
wagon.backgroundColor = background;
UIView *videoviewContainer = [[UIView alloc]initWithFrame:CGRectMake(20, 40, 220 , 200)];
UIImageView *videoImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0,0, 220, 100)];
UIImage *bgImage = [UIImage imageNamed:@"video.png"];
videoImageView.image = bgImage;
videoviewContainer.contentMode = UIViewContentModeLeft; // set Video Image view to left hand side of wagon UIView
videoImageView.tag=2;
[videoviewContainer addSubview:videoImageView];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
[videoImageView addGestureRecognizer:singleTap];
[videoImageView setMultipleTouchEnabled:YES];
[videoImageView setUserInteractionEnabled:YES];
UIView *textUiView = [[UIView alloc]initWithFrame:CGRectMake(238,28, 150 , 187)];
textUiView.contentMode = UIViewContentModeRight;
UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(28,10, 150 , 87)];
label.text=@"This is testing text for IOS app to check line are aligned or not and to check video image and nested views for UIviews";
label.backgroundColor = [UIColor clearColor];
label.textColor=[UIColor redColor];
label.numberOfLines = 4;
[textUiView addSubview:label];
[wagon addSubview:textUiView];
[wagon addSubview:videoviewContainer];
[scrollView addSubview:wagon];
[self.contentView addSubview:scrollView];
}
}
}
return self;
}
- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
NSLog(@"Touch event on view %d",gesture.view.tag);
}
我创建了像这样的Scrollview子类..
@implementation cellScrollViewClass
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
NSLog(@"You are in scrollview");
}
return self;
}
这是一个正确的实施方法吗?
感谢任何帮助。先感谢您。
答案 0 :(得分:1)
使用UITapGestureRecognizer
。在创建每个图像视图时,为每个图像视图创建并附加一个水龙头手势识别器。还可以在创建图像视图时设置标记,以便识别单元格中的哪个标记。
当您从识别器获得回调时,您可以通过以下方式获取标记:
recogniser.view.tag
您可以通过在超级视图上循环来获取表格视图单元格,直到找到表格视图单元格类:
UIView *superView = recogniser.view.superview;
while (superView != nil && ![superView isKindOfClass:[UITableViewCell class]]) {
superView = superView.superview;
}
然后,您可以使用
从表格视图中获取索引路径[tableView indexPathForCell:superView];
答案 1 :(得分:0)
要让UIImageView
的点击聆听者有一个类别&amp;使用touches begin method
并将回调委托给'tableViewController'。
使用标签识别点击的图片&amp;哪一排。
为了避免重叠,如果我们已经分配的单元格只是删除了之前的图像来执行此操作,则会有else
条件。
答案 2 :(得分:0)
你需要实现UIScrollView委托回调并检查用户正在做什么样的滚动(水平滚动或垂直滚动),然后手动更改tableview或scrollview偏移量,这几乎是我看到的唯一方式..
对于你的图像,你需要为everyImage设置一个UIButton并将它们链接到选择器,然后你可以使用按钮的标签来知道它是什么图像。
答案 3 :(得分:0)
您可以使用相同的图像视图框在图像视图上添加自定义按钮,然后可以在按钮上添加选择器。
答案 4 :(得分:-1)
要在UIImageView上处理手势,请确保您使用的UIImageView默认情况下userInteractionEnable = YES
设置为NO