-1

可能重复:
按钮操作在 iphone 中不起作用?

我有一个应用程序,在该应用程序中,我添加了一个图像视图,而不是导航栏视图。像这样在视图中确实加载了方法。

curtainsView=[[UIImageView alloc]init];

curtainsView.image=[UIImage imageNamed:@"curtains.png"];
curtainsView.frame=CGRectMake(0,-44, 320, 60);
curtainsView.backgroundColor=[UIColor clearColor];

[self.view addSubview:curtainsView];

现在我想在该图像视图上添加一个按钮。我正在尝试用这个来实现

UIImage *button2Image = [UIImage imageNamed:@"scroll_down.png"];
UIButton *scroll = [UIButton buttonWithType:UIButtonTypeCustom];
//scroll = [[UIButton alloc] init];
//self.scroll.tag=100;
[scroll setImage:button2Image forState:UIControlStateNormal];
scroll.frame = CGRectMake(270,-30, 40,40);
[scroll addTarget:self action:@selector(backpressed) forControlEvents:UIControlEventTouchUpInside]; 
//[scroll setUserInteractionEnabled:YES];
[self.view addSubview:scroll];

不工作。然后我也试过这个

UIButton *btnDetail = [[UIButton buttonWithType:UIButtonTypeDetailDisclosure]retain];

btnDetail.frame = CGRectMake(260,-15,100,100);
[btnDetail addTarget:self action:@selector(backpressed) forControlEvents:UIControlEventAllTouchEvents];

[self.curtainsView addSubview:btnDetail];
[self.curtainsView bringSubviewToFront:btnDetail];
[self.curtainsView setUserInteractionEnabled:YES];

也不工作。如果它在该图像视图的一侧,则它不起作用,但是当我尝试添加带有框架的第二个代码时,CGRectMake(260,0,100,100)它可以正常工作。但我需要该按钮位于该图像视图内。有人可以帮我吗?

4

4 回答 4

1

您不应该在 imageViews 上添加子视图。而是将您的按钮添加到 imageView 上方的 self.view 中。并且不要在其超级视图范围之外添加您的按钮。

UIImage *button2Image = [UIImage imageNamed:@"scroll_down.png"];
UIButton *scroll = [UIButton buttonWithType:UIButtonTypeCustom];
[scroll setImage:button2Image forState:UIControlStateNormal];
scroll.frame = CGRectMake(270, 0, 40, 40);
[scroll addTarget:self action:@selector(backpressed) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:scroll];
于 2012-09-05T08:15:03.500 回答
0

您需要在视图而不是图像视图上添加一个按钮。将您的按钮添加到 self.view 而不是 imageview。

    [self.view addSubview:btnDetail];
    [self.view bringSubviewToFront:btnDetail];

它会正常工作。

于 2012-09-05T09:05:55.130 回答
0

这将起作用:

UIImageView *imgview=[[UIImageView alloc]initWithFrame:CGRectMake(10, 100, 300, 300)];
imgview.backgroundColor=[UIColor whiteColor];
imgview.userInteractionEnabled=YES;
[self.view addSubview:imgview];


UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
btn.Frame=CGRectMake(10, 10, 100, 20);
btn.backgroundColor=[UIColor blueColor];
[btn addTarget:self action:@selector(clickActonOfButtons) forControlEvents:UIControlEventTouchUpInside];
[imgview addSubview:btn];
btn=nil;
[imgview release];

注意:如果您要在按钮上添加图像......在这种情况下 imgview.userInteractionEnabled=NO;

于 2012-09-05T08:38:21.333 回答
0

使您的 ImgView 的 userInteractionEnabled 为 YES,默认为 NO。

UIImageView 中的触摸不会传递给 UIButton。

curtainsView.userInteractionEnabled=YES;

还将 UIButton 的 userInteractionEnabled 设置为 YES

btnDetail.userInteractionEnabled=YES;

在设置像 CGRectMake(260,-15,100,100) 这样的框架时,还要检查 btnDetail 的边界是否超出了超级视图的边界;

当您设置 CGRectMake(260,0,100,100) 时,它可以工作,因为 btnDetail 的边界在可见区域和超级视图边界内

于 2012-09-05T08:44:12.597 回答