我想创建一个UIButton来显示UIImageView 。我的代码段如下所示:
imageView = [[UIImageView alloc] initWithImage:image]; //initWithImage:image
imageView.userInteractionEnabled = YES; //to enable touch interaction with image
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"ClickMe" forState:UIControlStateNormal];
[btn.titleLabel setFont:[UIFont systemFontOfSize:16]];
btn.frame = CGRectMake(340, 550, 70, 50);
[btn addTarget:self action:@selector(onClickHotSpotButton) forControlEvents:UIControlEventTouchUpInside]; //it wasnt working
[imageView addSubview:btn];
[self addSubview:imageView];
我的应用程序在我想要的图像的一部分上显示按钮,但它不响应点击图像。相反,它确实检测到单击,因为它在检测时记录输出。但我希望这个按钮被点击选择并执行一些功能。
提前致谢。
wahib
答案 0 :(得分:5)
我试过这个,它对我有用.......
UIImageView * imageView = [[UIImageView alloc]init];
[imageView setImage:[UIImage imageNamed:@"image.jpeg"]];
[imageView setFrame:CGRectMake(10,10,300,300)];
[imageView setContentMode:UIViewContentModeScaleToFill];
[imageView setUserInteractionEnabled:TRUE];
UIButton * ButtonOnImageView = [[UIButton alloc]init];
[ButtonOnImageView setFrame:CGRectMake(135,120,60,30)];
[ButtonOnImageView setImage:[UIImage imageNamed:@"image.jpeg"] forState:UIControlStateHighlighted];
[ButtonOnImageView setImage:[UIImage imageNamed:@"image2.jpeg"] forState:UIControlStateNormal];
[ButtonOnImageView addTarget:self action:@selector(OnClickOfTheButton) forControlEvents:UIControlEventTouchUpInside];
[imageView addSubview:ButtonOnImageView];
[self.view addSubview:imageView];
答案 1 :(得分:3)
您只需使用一个按钮即可:
[UIButton setImage:[imageNamed:@"image.png"]];
答案 2 :(得分:3)
你必须将define按钮添加为custom.It将为你工作。
UIButton * Button = [UIButton buttonWithType:UIButtonTypeCustom];
答案 3 :(得分:1)
您需要将按钮添加为
的子类滚动视图
不是
imageview的
.. 如果按钮是uiimageview的子类,它将不会被点击。 为每个按钮分配一个特殊标签,以识别单击的按钮
希望这会有所帮助
答案 4 :(得分:0)
如果是可点击的图片,我更喜欢图像超过按钮。
UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom];
[sampleButton setFrame:CGRectMake(kLeftMargin, 10, self.view.bounds.size.width - kLeftMargin - kRightMargin, 52)];
[sampleButton setTitle:@"Button Title" forState:UIControlStateNormal];
[sampleButton setFont:[UIFont boldSystemFontOfSize:20]];
[sampleButton setBackgroundImage:[[UIImage imageNamed:@"redButton.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal];
[sampleButton addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:sampleButton];
答案 5 :(得分:0)
我在其中一个应用中做了类似的事情。我创建了一个包含一系列图像的xib文件,每个图像都有一个从顶部绘制的按钮。我将它们连接到类文件中的相应插座。然后我解决了在touchesBegan点击使用:
if(CGRectContainsPoint(btnFirstButton.frame, touchLocation)){
//do something useful
}else if(CGRectContainsPoint(btnSecondButton.frame, touchLocation)){
//do something useful
}
希望有所帮助 - 为我工作: - )
答案 6 :(得分:0)
我可以在UIImageVIew上显示UIButton,这是更新代码。我已经提到了最近的问题。
imageView = [[UIImageView alloc] initWithImage:image]; //initWithImage:image
//imageView.tag = i; // tag our images for later use when we place them in serial form
[imageView setContentMode:UIViewContentModeScaleToFill]; //though it has no impact
imageView.userInteractionEnabled = YES; //to enable touch interaction with image
[self addSubview:imageView];
UIButton *btn = [[UIButton buttonWithType:UIButtonTypeContactAdd] retain]; //Plus icon button
btn.frame = CGRectMake(215, 550, 100, 100);
[btn addTarget:self action:@selector(onClickHotSpotButton) forControlEvents:UIControlEventTouchUpInside]; //it wasnt working
**[self addSubview:btn]; //Buttons are clickable but shows button on all images**
//[imageView addSubview:btn]; //Buttons are not clickable and are shown on all images
我现在有两个选择。我是否将我的按钮设为ImageView或ScrollView的子视图,它是ImageView的父级。如果我像[self addSubView:btn]那样制作Scrollview的按钮子视图;它显示在正确的位置并且是可点击的,但问题是它是在队列中的所有图像上创建的,因为我将它作为父视图的子视图,即scrollview。否则,如果我将其视为子视图的子视图,即ImageView,它对于每个图像都是唯一的,但仍然显示在所有图像上且不可点击:/
any1可以指导我如何使其可点击并保持动态按钮和图像之间的链接唯一,这样我在队列中的每个图像上的不同位置都有不同的按钮。
答案 7 :(得分:0)
尝试设置按钮的用户交互功能。
[btn setEnabled:YES];
因为UIImageView将默认设置禁用按钮的用户交互。
否则你可以尝试这个。只需改变最后两行。
替换:
[imageView addSubview:btn];
[self addSubview:imageView];
用这个:
[self addSubview:imageView];
[self addSubview:btn];
确保首先添加imageview,然后按照我的提及添加第二个按钮。否则按钮会放在imageview后面,似乎是隐藏的。