我的 iPhone 项目中有 15 个 UIButton,单击按钮后会弹出一个图像,并且不同按钮的所有图像都不同,我如何通过触摸来实现这一点?
我应该如何为特定按钮调用正确的图像?
我不想拿 15 个 UIButtons 和 15 个 UIImageView 。
我的 iPhone 项目中有 15 个 UIButton,单击按钮后会弹出一个图像,并且不同按钮的所有图像都不同,我如何通过触摸来实现这一点?
我应该如何为特定按钮调用正确的图像?
我不想拿 15 个 UIButtons 和 15 个 UIImageView 。
您可以使用 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;
}
}
}
拥有包含所有 15 个按钮信息的视图的背景图像,这些信息被分为 15 个位置以检测触摸。获取触摸位置(坐标)并根据预定义的特定位置,相应地更新弹出 UIImageView 中的图像。
这可能有助于在视图中获取触摸的位置。
您可以将所有 15 个按钮都连接到一个 " IBAction
" 方法。
调用该方法时,发送的参数(例如“ (id) sender
”)是发送消息的对象。
如果您为每个按钮分配不同的标签,您将知道哪个按钮调用了操作方法,然后您可以为每个不同的按钮显示不同的图像。
您在这里只需要一个“ IBAction
”方法和一个IBOutlet
用于单个图像视图的“ ”。不过,您仍然需要某种逻辑来将 15 个不同的图像加载到单个图像视图中。
这是您可以执行的操作:单击任何按钮后都会调用它:
-(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;
}