0

我的 iPhone 项目中有 15 个 UIButton,单击按钮后会弹出一个图像,并且不同按钮的所有图像都不同,我如何通过触摸来实现这一点?

我应该如何为特定按钮调用正确的图像?

我不想拿 15 个 UIButtons 和 15 个 UIImageView 。

4

4 回答 4

0

您可以使用 IBOutletCollections,这需要您在 Xib 中连接 15 个 UIButton。以下代码假定您有一组 N 按钮。对于给定的手势,它将遍历集合中的按钮并确定触摸的位置是否在按钮框架内。

编辑: IBOutletCollections 在 iOS 4 及更高版本中可用。

假设您具有以下属性:

@property (strong, nonatomic) IBOutletCollection(UIButton)    NSArray  *collection_buttons;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

以及以下合成:

@synthesize collection_buttons = _collection_buttons, imageView = _imageView;

然后您可以在手势回调中使用以下代码。

-(IBAction) tapGestureOnButton:(UITapGestureRecognizer *) gesture {
    CGPoint point = [gesture locationInView:self.view_buttonContainer];

    for( int index = 0; index < self.collection_buttons.count; index++ ) {
        if( CGRectContainsPoint(((UIButton *)[_collection_buttons objectAtIndex:index]).frame, point)) {
            //Button at index has been pressed
            [imageView setImage:[button backgroundImageForState:UIControlStateNormal]];               

            break;
        }
    }

}
于 2013-04-15T14:35:18.580 回答
0

拥有包含所有 15 个按钮信息的视图的背景图像,这些信息被分为 15 个位置以检测触摸。获取触摸位置(坐标)并根据预定义的特定位置,相应地更新弹出 UIImageView 中的图像。

这可能有助于在视图中获取触摸的位置。

UIView 触摸位置坐标

于 2013-04-15T12:53:33.687 回答
0

您可以将所有 15 个按钮都连接到一个 " IBAction" 方法。

调用该方法时,发送的参数(例如“ (id) sender”)是发送消息的对象。

如果您为每个按钮分配不同的标签,您将知道哪个按钮调用了操作方法,然后您可以为每个不同的按钮显示不同的图像。

您在这里只需要一个“ IBAction”方法和一个IBOutlet用于单个图像视图的“ ”。不过,您仍然需要某种逻辑来将 15 个不同的图像加载到单个图像视图中。

于 2013-04-15T12:43:25.493 回答
0

这是您可以执行的操作:单击任何按钮后都会调用它:

-(IBAction)buttonClicked:(UIButton *)sender {

   if(sender.tag == 0){
    NSLog(@"Button one");
} else if(sender.tag == 1){
    NSLog(@"Button two"); ... // like wise do it for 15 buttons
}

}

您所要做的就是在创建按钮时为其分配标签。我认为您必须运行 for 循环 15 次才能创建这些按钮,所以:

for(i=0;i<15;i++){
 //create button..
 button.tag = i;
}
于 2013-04-15T12:48:25.847 回答